rubyregex

ruby regex: match and get position(s) of


I'd like to match a regex and get the position in the string of the match

For example,

"AustinTexasDallasTexas".match_with_posn /(Texas)/

I'd like match_with_posn to return something like: [6, 17] where 6 and 17 are the start positions for both instances of the word Texas.

Is there anything like this?


Solution

  • Using Ruby 1.8.6+, you can do this:

    require 'enumerator' #Only for 1.8.6, newer versions should not need this.
    
    s = "AustinTexasDallasTexas"
    positions = s.enum_for(:scan, /Texas/).map { Regexp.last_match.begin(0) }
    

    This will create an array with:

    => [6, 17]