0

文字列内の特定の文字をエスケープしようとしています。特に回したいのは

abc/def.ghiの中へabc\/def\.ghi

次の構文を使用しようとしました。

1.9.3p125 :076 > "abc/def.ghi".gsub(/([\/.])/, '\\\1')
 => "abc\\1def\\1ghi" 

うーん。これは、キャプチャの置換が機能しなかったかのように動作します。それでも、私がこれを試したとき:

1.9.3p125 :075 > "abc/def.ghi".gsub(/([\/.])/, '\1')
 => "abc/def.ghi"

... 代わりに動作するようになりましたが、もちろん、私のプレフィックスはその一部ではありませんでした。

このようなことを行うための正しい構文は何ですか?

4

3 に答える 3

1

これはもっと簡単なはずです

gsub(/(?=[.\/])/, "\\")
于 2013-04-04T16:29:53.623 に答える
0

ブロックを次の場所に渡すことができますgsub:

>> "abc/def.ghi".gsub(/([\/.])/) {|m| "\\#{m}"}
=> "abc\\/def\\.ghi"

@sawaの回答ほどエレガントではありませんが、キャプチャされたグループ/後方参照を含む置換文字列が必要な場合(先読みの前に置換を挿入するのではなく)、それを機能させる唯一の方法でした。

于 2013-04-04T16:45:55.983 に答える