В других языках regexp вы можете использовать //g для глобального соответствия.
Однако в Ruby:
"hello hello".match /(hello)/
Захватывает только один привет
Как я могу захватить все приветствия?
Ответ 1
Вы можете использовать метод сканирования. Метод сканирования либо даст вам массив всех совпадений, либо, если вы передадите ему блок, передайте каждое соответствие блоку.
"hello1 hello2".scan(/(hello\d+)/) # => [["hello1"], ["hello2"]]
"hello1 hello2".scan(/(hello\d+)/).each do|m|
puts m
end
Я написал об этом методе, вы можете прочитать об этом здесь в конце статьи.
Ответ 2
используйте String#scan. Он вернет массив каждого совпадения, или вы можете передать блок, и он будет вызываться с каждым соответствием.