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