Почему я не могу заменить '\\ +' внутри строки с помощью gsub? - PullRequest
3 голосов
/ 12 апреля 2010

Попробуйте следующий код:

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

Wtf? Похоже, что символ '\ +' (возвращаемый Regexp.escape) полностью игнорируется gsub. Как это исправить?

Ответы [ 2 ]

3 голосов
/ 12 апреля 2010

Это из-за интерполяции специальных переменных. \+ будет заменено на «текст, соответствующий группе захвата с наибольшим номером, которая фактически участвовала в матче» (см. Раздел «Специальные переменные» на http://www.regular -expressions.info / ruby.html )

Синтаксис блока на самом деле исправляет это, молодец.

1 голос
/ 12 апреля 2010

xsdg из #ruby сработало

Похоже, что замена gsub анализируется, поэтому + теряется где-то в процессе. Обходной путь использует блочный синтаксис gsub. Сюда:

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

Работает как положено:)

Спасибо, xsdg!

...