3

次のコードを試してください。

s = '#value#'
puts s.gsub('#value#', Regexp.escape('*'))         # => '\*'
puts s.gsub('#value#', Regexp.escape('+'))         # => ''

え?char '\+' (Regexp.escape によって返される) は、gsub によって完全に無視されているようです。これを修正する方法は?

4

2 に答える 2

3

これは、特別な変数の補間によるものです。\+「実際に試合に参加した最大番号のキャプチャグループによって照合されたテキスト」に置き換えられます(http://www.regular-expressions.info/ruby.htmlの「特殊変数」セクションを参照) 。

ブロック構文は、実際にはこれを修正したものであり、よくできています。

于 2010-04-12T05:14:38.690 に答える
1

#ruby の xsdg はこれを解決しました

gsub の置換が解析されているように見えるため、プロセスのどこかで + が失われます。回避策は、gsub のブロック構文を使用することです。こちらです:

s = '#value#'
puts s.gsub('#value#') { |v| Regexp.escape('+') }          # => '+'

期待どおりに動作します:)

ありがとう、xsdg!

于 2010-04-12T05:10:30.653 に答える