preg_match_all и preg_replace в Ruby - PullRequest
       23

preg_match_all и preg_replace в Ruby

11 голосов
/ 26 апреля 2011

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

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

Ответы [ 3 ]

22 голосов
/ 26 апреля 2011

Эквивалент в 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 теперь содержит новую строку с текстом замены.

3 голосов
/ 26 апреля 2011

Для 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

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

0 голосов
/ 26 апреля 2011

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

"String"[/reg[exp]/]
...