preg_match_all and preg_replace in Ruby
Asked Answered
M

3

11

I am transitioning from php to ruby and I am trying to figure the cognate of the php commands preg_match_all and preg_replace in ruby.

Thank you so much!

Marotta answered 26/4, 2011 at 14:19 Comment(0)
H
22

The equivalent in Ruby for preg_match_all is String#scan, like so:

In PHP:

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

and in Ruby:

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

result now contains an array of matches.

And the equivalent in Ruby for preg_replace is String#gsub, like so:

In PHP:

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

and in Ruby:

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

result now contains the new string with the replacement text.

Harmonyharmotome answered 26/4, 2011 at 14:32 Comment(0)
C
3

For preg_replace you would use string.gsub(regexp, replacement_string)

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

The string can also be a variable, but you probably know that already. If you use gsub! the original string will be modified. More information at http://ruby-doc.org/core/classes/String.html#M001186

For preg_match_all you would use string.match(regexp) This returns a MatchData object ( http://ruby-doc.org/core/classes/MatchData.html ).

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

Or you could use string.scan(regexp), which returns an array (which is what you're looking for, I think).

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

Match: http://ruby-doc.org/core/classes/String.html#M001136

Scan: http://ruby-doc.org/core/classes/String.html#M001181

EDIT: Mike's answer looks much neater than mine... Should probably approve his.

Carinthia answered 26/4, 2011 at 14:40 Comment(0)
I
0

Should be close for preg_match

"String"[/reg[exp]/]
Its answered 26/4, 2011 at 14:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.