Group names in regular expressions

Given the following regex to parse telephone numbers:

/^(\(?(?<area>[0-9]{3})\)?)?(\-| )?(?<exch>[0-9]{3})(\-|
)?(?<party>[0-9]{4})/

Is there a regex.method to access the parse data by group name? I was
hoping something like the following behavior:

rx = /^(\(?(?<area>[0-9]{3})\)?)?(\-| )?(?<exch>[0-9]{3})(\-|
)?(?<party>[0-9]{4})/
md = rx.match('800 325-3535')
puts md['area']+md['exch']+md['party']

I'm not that skilled with regex (yet), so I don't know if I could
extend the regex class with my own method. I'm not sure what all data
is available to me after parsing.

dvn

donn@cmscms.com wrote:

Given the following regex to parse telephone numbers:

/^(\(?(?<area>[0-9]{3})\)?)?(\-| )?(?<exch>[0-9]{3})(\-|
)?(?<party>[0-9]{4})/

Is there a regex.method to access the parse data by group name? I was
hoping something like the following behavior:

rx = /^(\(?(?<area>[0-9]{3})\)?)?(\-| )?(?<exch>[0-9]{3})(\-|
)?(?<party>[0-9]{4})/
md = rx.match('800 325-3535')
puts md['area']+md['exch']+md['party']

I'm not that skilled with regex (yet), so I don't know if I could
extend the regex class with my own method. I'm not sure what all data
is available to me after parsing.

For "group names", you can use this basic replacement idea:

[ 1,2,3,4 ].each do |exch|
  [ "jones","smith" ].each do |party|
    [ 303,404,505 ].each do |area|
      array = data.scan(%r{[regex code](#{area})(#{exch})(#{party})[regex
code]})
    end
  end
end

using this code and suitable data, "array" will contain:

[[area1,exch1,party1],[area2,exch2,party2], ... ]

ยทยทยท

--
Paul Lutus
http://www.arachnoid.com

donn@cmscms.com wrote:

Given the following regex to parse telephone numbers:

/^(\(?(?<area>[0-9]{3})\)?)?(\-| )?(?<exch>[0-9]{3})(\-|
)?(?<party>[0-9]{4})/

Is there a regex.method to access the parse data by group name? I was
hoping something like the following behavior:

rx = /^(\(?(?<area>[0-9]{3})\)?)?(\-| )?(?<exch>[0-9]{3})(\-|
)?(?<party>[0-9]{4})/
md = rx.match('800 325-3535')
puts md['area']+md['exch']+md['party']

I'm not that skilled with regex (yet), so I don't know if I could
extend the regex class with my own method. I'm not sure what all data
is available to me after parsing.

dvn

With Ruby's builtin regex engine? No. With Oniguruma (or the Ruby 1.9
branch)? Yes.

http://www.geocities.jp/kosako3/oniguruma/

Regards,

Dan