Rubyで次のようなテキストから \ バックスラッシュを取り除こうと思っていますが、うまく置換されません。
Ruby
1data = "<img src=\"http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?\" border=\"0\" width=\"380\" height=\"437\" alt=\"{61DA79DE-8661-4F18-9522-E5413D4B0137}\"></a>"
以下のように\を''に置換して取り除こうと思ったのですが、何も変わらず表示されてしまいます。
Ruby
1puts data.gsub(/\\/) { '' }
どなたかご教授いただけませんでしょうか?
Ruby 2.3.1 を使っております。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
こんにちは。
端的かつ直感的に回答しますと、ご質問にあるコードの
ruby
1data = "<img src=\"http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?\" border=\"0\" width=\"380\" height=\"437\" alt=\"{61DA79DE-8661-4F18-9522-E5413D4B0137}\"></a>"
によってdataに代入される文字列には、そもそも削除対象とする(表示される文字としての) \
は含まれていないからです。
それは、以下のようにdataを表示してみると分かります。
ruby
1data = "<img src=\"http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?\" border=\"0\" width=\"380\" height=\"437\" alt=\"{61DA79DE-8661-4F18-9522-E5413D4B0137}\"></a>" 2 3puts data
上記によって、\
の含まれない以下が表示されると思います。
<img src="http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?" border="0" width="380" height="437" alt="{61DA79DE-8661-4F18-9522-E5413D4B0137}"></a>
これは、もともとのdataに(表示されるべき)文字としての \
は含まれておらず、dataに代入している文字列内に現れる \
は "
(ダブルコーテーション)で囲まれた文字列の中で、HTMLの属性値を囲むための"
を、文字列の終端を表す"
ではなく、"
という文字そのものとして扱うためのエスケープとして機能しているだけだからです。
ご質問にある正規表現 data.gsub(/\\/) { '' }
は問題ないです。それは以下によって分かります。
以下は、data に代入する文字列リテラルをくくるクオートを、ダブルコーテーションからシングルコーテーションに変更して、ご質問にある正規表現で \
を削除する前と後を表示させたものです。
Ruby
1data = '<img src=\"http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?\" border=\"0\" width=\"380\" height=\"437\" alt=\"{61DA79DE-8661-4F18-9522-E5413D4B0137}\"></a>' 2 3puts '削除前: ' + data 4 5puts '削除後: ' + data.gsub(/\\/) { '' }
上記によって、以下が表示されます。
削除前: <img src=\"http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?\" border=\"0\" width=\"380\" height=\"437\" alt=\"{61DA79DE-8661-4F18-9522-E5413D4B0137}\"></a> 削除後: <img src="http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?" border="0" width="380" height="437" alt="{61DA79DE-8661-4F18-9522-E5413D4B0137}"></a>
期待通り、\
が削除されます。
以下も参考にされるとよいかもしれません。
肝になるのは、文字列リテラルをシングルクオート'
でくくる場合と、ダブルクオート"
でくくる場合とで、何が違うのかという点です。
以上、ご参考になれば幸いです。
投稿2017/01/15 18:12
編集2017/01/16 16:42総合スコア9058
0
Ruby
1data = "<img src=\"http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?\" border=\"0\" width=\"380\" height=\"437\" alt=\"{61DA79DE-8661-4F18-9522-E5413D4B0137}\"></a>" 2p data.gsub("\"", "")
実行結果例
"<img src=http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg? border=0 width=380 height=437 alt={61DA79DE-8661-4F18-9522-E5413D4B0137}></a>"
私も考えてみました。私の場合は特に何も考えずに見たまま変更しています。
追記
よくかんがえたら「"」を残さないといけなかったので、ykt68様の方法が
良いと思います。
追記
質問者様のプログラムを実行したところ
Ruby
1<img src="http://stat.ameba.jp/user_images/20170107/15/isopp-blog/37/b4/j/xxxx.jpg?" border="0" width="380" height="437" alt="{61DA79DE-8661-4F18-9522-E5413D4B0137}"></a>
ちゃんと「\」は変更されていました。
私はRuby 2.2.6を使っています。
投稿2017/01/15 23:09
編集2017/01/15 23:35退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。