Как создать регулярное выражение, которое заменяет все совпадения в строке через gsub ruby? - PullRequest
2 голосов
/ 22 сентября 2011

Интересно, почему мое регулярное выражение не будет работать, мне нужно добиться следующего поведения:

"aoaoaoaoaoao".gsub!(/o/, 'e')

Выше правильно даст мне: Aeaeaeaeaeae

Теперь, реальная вещь выглядит так:

"Today I ate a ((noun)), and it tasted ((adjective))".gsub!(/\(\(.*\)\)/, "word")

И его результат таков: «Сегодня я съел слово» , но я надеялся, что он вернется ко мне: «Сегодня я съел слово, и оно попробовало слово»

Очевидно, есть проблема с моим регулярным выражением, (верно?), Потому что оно заменится только один раз. Ребята, скажите, пожалуйста, как сделать так, чтобы он заменял все спички? (как в моем первом примере)

Большое спасибо!

1 Ответ

8 голосов
/ 22 сентября 2011

Вам необходимо следующее регулярное выражение:

/\(\(.*?\)\)/

.*? потребляет как можно меньше символов, чтобы получить совпадение.Таким образом, проблема заключалась не в том, что регулярное выражение заменялось один раз, а в том, что оно соответствовало слишком большой части строки - от первого (( до последнего )).

...