I like that regex more, but there are still a few minor changes I would make.
while (<>){
if(/
(
[0-3]?[0-9](?:th|st|nd|rd)?\s+ # Get day
(?: # Get month
Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|
Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|
Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|
Nov(?:ember)?|Dec(?:ember)?
)\s+
[0-9]{2,4} # Get Year
)
/ix) {
print "$1\n";
}
}
The (?:) things are just like normal ()'s except they don't capture to a variable, they just do grouping, helps the interpreter optimize the regex.
The {x,y} means require atleast x of the previous item, and at most y. For refrence you can also say {x} which means require x of them, or {x,} which means atleast x.
-Ted