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


in reply to Matching Date

It's not clear exactly what you wanted to happen in the above, but your first pattern was matching because you didn't tell it the pattern needed to start with the first character. Without the ^ that I added, to the beginning of each regex, perl would begin the match wherever it could in the string. You may also want to finish the regex off with a $ so you only match when the entire line matches, depending upon you you are getting your $mon/$mday/$year, with an else for something that really isn't a good match.
#my $date = "$mon/$mday/$year"; my $date = "10/13/2006"; if ($date=~/^(\d{1})\/(\d{2})\/(\d{4})/) { $date="0".$1."\/".$2."\/".$3; print "<br>L1 - $date<br>\n"; } elsif($date=~/^(\d{2})\/(\d{1})\/(\d{4})/) { $date=$1."\/0".$2."\/".$3; print "<br>L2 - $date<br>\n"; } elsif($date=~/^(\d{2})\/(\d{2})\/(\d{4})/) { $date=$1."\/0".$2."\/".$3; print "<br>L3 - $date<br>\n"; } else{ $date=~/^(\d{1})\/(\d{1})\/(\d{4})/; $date="0".$1."\/0".$2."\/".$3; print "<br>L4 - $date</br>\n"; }
That prints 'L3 - 10/13/2006' between breaks.