http://www.perlmonks.org?node_id=268171


in reply to Parse mailing addresses with a regex

The first mistake most make when creating a complex regex is to use $1,$2, et al. Just capture everything into an array. This is not guaranteed to work for everything you throw at it, but it works for the data you have given:
my @line; foreach my $line (@data_file) { @line = $line =~ / (\d+)\s+ # first numbers ([^\d]+) # full name (.*)?(?:\w\w)\s+ # street address (\w\w)\s+ # state (\d{5})\s+ # zip (\d{3}-\d{3}-\d{4})\s+ # phone (.*) # the rest /x; print join('|',@line),"\n"; }
And here is a play by play breakdown ;) Hope this helps, anything more might require something smarter like Parse::RecDescent.

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)