((17((5[3-9])|([6-9]\d)))|((18|19)\d\d)|([2-9]\d\d\d))[-/.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01]) ^ unescaped / terminates the RE if you use it in /((17...)/ but even if you encapsulate it in a variable there's still problems: #!/usr/bin/perl @sampdata = qw ( 894/7/14 1752/8/12 1753/12/24 1957/8/30 3998/4/22 9999/3/15 10000/1/1 ); $re = "((17((5[3-9])|([6-9]\d)))|((18|19)\d\d)|([2-9]\d\d\d))[-/.](0[1-9]|1[012])[- /.](0[1-9]| [12][0-9]|3[01])"; while (<@sampdata>) { print; print ( /$re/ ? " is " : " is not " ); print " in range 1753 to 9999\n"; } __END__ 894/7/14 is not in range 1753 to 9999 1752/8/12 is not in range 1753 to 9999 1753/12/24 is in range 1753 to 9999 1957/8/30 is not in range 1753 to 9999 3998/4/22 is not in range 1753 to 9999 9999/3/15 is not in range 1753 to 9999 10000/1/1 is not in range 1753 to 9999 So a change of ((17((5[3-9])|([6-9]\d))) to ((17((5[3-9])|(1([6-9]\d)))) Seems to be in order. Re: the two instances of [-/.], was the second one supposed to include a space?