Preg_match_all и preg_replace в Ruby

Я перехожу из php в ruby, и я пытаюсь понять родственные команды php preg_match_all и preg_replace в ruby.

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

Ответ 1

В Ruby для preg_match_all эквивалент эквивалентен String#scan:

В PHP:

$result = preg_match_all('/some(regex)here/i', 
          $str, $matches);

и в Ruby:

result = str.scan(/some(regex)here/i)

result теперь содержит массив совпадений.

И эквивалент в Ruby для preg_replace равен String#gsub, например:

В PHP:

$result = preg_replace("some(regex)here/", "replace_str", $str);

и в Ruby:

result = str.gsub(/some(regex)here/, 'replace_str')

result теперь содержит новую строку с заменяющим текстом.

Ответ 2

Для preg_replace вы должны использовать string.gsub(regexp, replacement_string)

"I love stackoverflow, the error".gsub(/error/, 'website') 
# => I love stack overflow, the website

Строка также может быть переменной, но вы, вероятно, уже знаете это. Если вы используете gsub! исходная строка будет изменена. Дополнительная информация на http://ruby-doc.org/core/classes/String.html#M001186

Для preg_match_all вы должны использовать string.match(regexp) Это возвращает объект MatchData (http://ruby-doc.org/core/classes/MatchData.html).

"I love Pikatch. I love Charizard.".match(/I love (.*)\./)
# => MatchData

Или вы можете использовать string.scan(regexp), который возвращает массив (который, как вам кажется, вы ищете).

"I love Pikatch. I love Charizard.".scan(/I love (.*)\./)
# => Array

Матч: http://ruby-doc.org/core/classes/String.html#M001136

Сканирование: http://ruby-doc.org/core/classes/String.html#M001181

РЕДАКТИРОВАТЬ: Майк отвечает намного опрятно, чем мой... Возможно, одобрить его.

Ответ 3

Должен быть близок к preg_match

"String"[/reg[exp]/]