Заменить "&" на "\ &" в Ruby кажется невозможным? - PullRequest
4 голосов
/ 04 июля 2011

Я хочу заменить все & символы на \& на String.gsub (или другим способом).Я попробовал несколько комбинаций и прочитал другой вопрос здесь , но ничего не получится.

  "asdf & asdf".gsub("&", "\\\&") => "asdf & asdf"

Ответы [ 3 ]

10 голосов
/ 04 июля 2011

Ваш связанный вопрос предоставляет решение - используйте блочную форму gsub:

irb(main):009:0> puts "asdf & asdf".gsub("&"){'\&'}
asdf \& asdf
2 голосов
/ 04 июля 2011

Я собираюсь догадаться, что вы используете 1.8.В 1.8 irb говорит следующее:

>> "asdf & asdf".gsub("&", "\\\&")
=> "asdf & asdf"
>> puts "asdf & asdf".gsub("&", "\\\&")
asdf & asdf

И это соответствует тому, что вы видите.Но, если вы добавите еще одну обратную косую черту, вы получите то, что вам нужно:

>> puts "asdf & asdf".gsub("&", '\\\\&')
asdf \& asdf

Четвертый подход с обратной косой чертой дает мне одинаковый экранированный амперсанд как в 1.9.2, так и в 1.8.7, такдо четырех (не одиннадцать, подойдут только четыре).

1 голос
/ 04 июля 2011
ruby-1.9.2-p180 :008 > puts "asdf & asdf".gsub(/&/, '\\\&')
asdf \& asdf
...