Ruby global match regexp? - программирование
Подтвердить что ты не робот

Ruby global match regexp?

В других языках regexp вы можете использовать //g для глобального соответствия.

Однако в Ruby:

"hello hello".match /(hello)/

Захватывает только один привет

Как я могу захватить все приветствия?

4b9b3361

Ответ 1

Вы можете использовать метод сканирования. Метод сканирования либо даст вам массив всех совпадений, либо, если вы передадите ему блок, передайте каждое соответствие блоку.

"hello1 hello2".scan(/(hello\d+)/)   # => [["hello1"], ["hello2"]]

"hello1 hello2".scan(/(hello\d+)/).each do|m|
  puts m
end

Я написал об этом методе, вы можете прочитать об этом здесь в конце статьи.

Ответ 2

используйте String#scan. Он вернет массив каждого совпадения, или вы можете передать блок, и он будет вызываться с каждым соответствием.

Все подробности в http://ruby-doc.org/core/classes/String.html#M000812

Ответ 3

Вот совет для любого, кто ищет способ заменить все регулярные выражения на что-то еще.

Вместо флага //g и одного метода подстановки, как и многие другие языки, Ruby использует вместо него два разных метода.

# .sub — Replace the first
"ABABA".sub(/B/, '') # AABA

# .gsub — Replace all
"ABABA".gsub(/B/, '') # AAA