Ruby中的preg_match_all和preg_replace

时间:2011-04-26 14:19:22

标签: php ruby-on-rails ruby preg-replace preg-match-all

我正在从php过渡到ruby,我试图在ruby中找出php命令preg_match_all和preg_replace的同源词。

非常感谢你!

3 个答案:

答案 0 :(得分:22)

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现在包含带有替换文本的新字符串。

答案 1 :(得分:3)

对于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

编辑:迈克的回答看起来比我的要好得多......应该批准他的。

答案 2 :(得分:0)

应该关闭preg_match

"String"[/reg[exp]/]