Подтвердить что ты не робот

Как я могу заменить каждый экземпляр шаблона в рубине?

string.sub похоже, что он заменяет только первый экземпляр. Есть ли опция для того или другого метода, который может заменить все шаблоны? Можете ли вы сделать это внутри регулярного выражения, например perl?

(Я думаю, что-то вроде r/blah/blah/)

... и +1 всем, кто может сказать мне, ПОЧЕМУ НА ЗЕМЛЕЕ string.sub заменить только ПЕРВЫЙ матч?

4b9b3361

Ответ 1

String.gsub должен сделать трюк.

Цитирование документов:

gsub(pattern, replacement) → new_str

Возвращает копию str с все вхождения шаблона заменил второй аргумент. Образец, как правило, представляет собой Regexp; если задано как String, любое регулярное выражение метасимволов оно будет интерпретироваться буквально, например. \\d будет соответствовать за которым следует d вместо цифры.

Ответ 2

Я мог бы объяснить, почему sub просто заменяет первое совпадение шаблона, но я думаю, что документация делает это намного лучше (от ri String#sub в командной строке):

str.sub(pattern, replacement)         => new_str
str.sub(pattern) {|match| block }     => new_str

Returns a copy of _str_ with the _first_ occurrence of _pattern_
replaced with either _replacement_ or the value of the block.