Я перехожу из php в ruby, и я пытаюсь понять родственные команды php preg_match_all и preg_replace в ruby.
Большое вам спасибо!
Я перехожу из php в ruby, и я пытаюсь понять родственные команды php preg_match_all и preg_replace в ruby.
Большое вам спасибо!
В 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
теперь содержит новую строку с заменяющим текстом.
Для 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
РЕДАКТИРОВАТЬ: Майк отвечает намного опрятно, чем мой... Возможно, одобрить его.
Должен быть близок к preg_match
"String"[/reg[exp]/]