Techioz Blog

Ruby は文字列内のバックスラッシュを二重バックスラッシュに置き換えます [重複]

概要

PS.文字で分割してリスト要素を操作してから結合するように言わないでください;) これがサブのバグなのか、それとも何かが足りないのかを知る必要があります。私を悩ませるこの小さな問題があります。さよならたとえば、文字列内のすべてのバックスラッシュを 2 倍にする必要があります。文字列 1  2 がある場合、それを 1  2 に変換したいのですが、以下のコードがなぜ失敗するのかわかりません。手伝ってくれますか?

irb> s = '1 \\ 2'
irb> puts s
1 \ 2
irb> s.size 
5
irb> s[2]
"\\"
# now i try to do the substitution
irb> s2 = s.sub('\\', '\\'*2)   # or '\\\\'
"1 \\ 2"
irb> s2.size
5

解決策

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https://ruby-doc.org/3.2.2/String.html#class-String-label-Substitution+Methods

これは、さらにバックスラッシュが必要であることを意味します。

>> "1 \\ 2".sub("\\", "\\"*4)
=> "1 \\\\ 2"
# or
>> "1 \\ 2".sub("\\", Regexp.escape("\\\\"))
=> "1 \\\\ 2"