[regex-coach] alternations working differently in Regex Coach versus perl program.

Edi Weitz edi at agharta.de
Thu Sep 17 20:43:35 UTC 2009


Sorry for the delay.  I was on vacation and/or out of town most of the time.

Your regex is wrong.  The hyphen is part of one of the alternatives
(e.g. it's "10" OR "12-[012]..." and so on) which I think is not what
you want.

The Perl program behaves like the Regex Coach, but you don't see it.
Try replacing the line 'print "okay\n"' with 'print "okay[$']\n"'
(note the apostrophe there).

HTH,
Edi.



On Sun, Aug 2, 2009 at 8:35 PM, Troy Peterson
<troypennpeterson at gmail.com> wrote:
> I am writing a regex to test for valid dates in YYYY-MM-DD format.
> Using this regex in a perl test program I get positive results for all dates
> for the next 365 days.
> Regex Coach however failes to match some such as '2010-06-30'.  I assume
> this is because of the  order of the alternations and the regex wanting to
> match a sub-pattern as quickly as possible.  I can resolve the issue in The
> Regex Coach by adding () around the month and year patterns.
> I would like to know why there is a difference between my Perl program and
> Regex Coach.  Could this be implementation dependent.  Both my program and
> its output are below.
> I tend to think that The Regex Coach got this right.
> (?# regex in The Regex Coach)
>         [123456789]\d\d\d-                                           # year
>          (?:
>             (?:0[13578]|10|12 -  [012][123456789]|10|20|30|31)  |      #
> Months with 31 days
>             (?:0[469]|11      -  [012][123456789]|10|20|30   )  |      #
> Months with 30 days
>             (?:02             -  [012][12345678]||10|20|19   )         #
> Febuary
>          )
> ### perl Test program
> #!/iw-home/teamsite/iw-perl/bin/iwperl
> use strict;
> use warnings;
> use Carp;
> use Getopt::Long;
> use Pod::Usage;
> use Cwd;
> use Date::Calc qw(:all);
> my $dateregex = qr{
>         [123456789]\d\d\d-                                           # year
>          (?:
>             (?:0[13578]|10|12 -  [012][123456789]|10|20|30|31)  |      #
> Months with 31 days
>             (?:0[469]|11      -  [012][123456789]|10|20|30   )  |      #
> Months with 30 days
>             (?:02             -  [012][12345678]||10|20|19   )         #
> Febuary
>          )
> }smx;
> sub testdate {
>     my ($d) = (@_);
>     print "$d";
>     if ( $d =~ m{$dateregex}smx ) {
>         print "okay\n";
>     }
>     else {
>         print "\n";
>         croak "broken";
>     }
> }
> foreach my $d ( 1 .. 365 ) {
>     my ( $year, $month, $day, $hour, $min, $sec, $doy, $dow, $dst ) =
>       System_Clock();
>     ( $year, $month, $day, $hour, $min, $sec ) =
>       Add_Delta_DHMS( $year, $month, $day, '0', '0', '0', "$d", '0', '0',
> '0' );
>     my $td = sprintf( "%4d-%02d-%02d", $year, $month, $day );
>     testdate("$td");
> }
> exit;
>
> ##OUTPUT
> 2009-08-03okay
> 2009-08-04okay
> 2009-08-05okay
> 2009-08-06okay
> 2009-08-07okay
> 2009-08-08okay
> 2009-08-09okay
> 2009-08-10okay
> 2009-08-11okay
> 2009-08-12okay
> 2009-08-13okay
> 2009-08-14okay
> 2009-08-15okay
> 2009-08-16okay
> 2009-08-17okay
> 2009-08-18okay
> 2009-08-19okay
> 2009-08-20okay
> 2009-08-21okay
> 2009-08-22okay
> 2009-08-23okay
> 2009-08-24okay
> 2009-08-25okay
> 2009-08-26okay
> 2009-08-27okay
> 2009-08-28okay
> 2009-08-29okay
> 2009-08-30okay
> 2009-08-31okay
> 2009-09-01okay
> 2009-09-02okay
> 2009-09-03okay
> 2009-09-04okay
> 2009-09-05okay
> 2009-09-06okay
> 2009-09-07okay
> 2009-09-08okay
> 2009-09-09okay
> 2009-09-10okay
> 2009-09-11okay
> 2009-09-12okay
> 2009-09-13okay
> 2009-09-14okay
> 2009-09-15okay
> 2009-09-16okay
> 2009-09-17okay
> 2009-09-18okay
> 2009-09-19okay
> 2009-09-20okay
> 2009-09-21okay
> 2009-09-22okay
> 2009-09-23okay
> 2009-09-24okay
> 2009-09-25okay
> 2009-09-26okay
> 2009-09-27okay
> 2009-09-28okay
> 2009-09-29okay
> 2009-09-30okay
> 2009-10-01okay
> 2009-10-02okay
> 2009-10-03okay
> 2009-10-04okay
> 2009-10-05okay
> 2009-10-06okay
> 2009-10-07okay
> 2009-10-08okay
> 2009-10-09okay
> 2009-10-10okay
> 2009-10-11okay
> 2009-10-12okay
> 2009-10-13okay
> 2009-10-14okay
> 2009-10-15okay
> 2009-10-16okay
> 2009-10-17okay
> 2009-10-18okay
> 2009-10-19okay
> 2009-10-20okay
> 2009-10-21okay
> 2009-10-22okay
> 2009-10-23okay
> 2009-10-24okay
> 2009-10-25okay
> 2009-10-26okay
> 2009-10-27okay
> 2009-10-28okay
> 2009-10-29okay
> 2009-10-30okay
> 2009-10-31okay
> 2009-11-01okay
> 2009-11-02okay
> 2009-11-03okay
> 2009-11-04okay
> 2009-11-05okay
> 2009-11-06okay
> 2009-11-07okay
> 2009-11-08okay
> 2009-11-09okay
> 2009-11-10okay
> 2009-11-11okay
> 2009-11-12okay
> 2009-11-13okay
> 2009-11-14okay
> 2009-11-15okay
> 2009-11-16okay
> 2009-11-17okay
> 2009-11-18okay
> 2009-11-19okay
> 2009-11-20okay
> 2009-11-21okay
> 2009-11-22okay
> 2009-11-23okay
> 2009-11-24okay
> 2009-11-25okay
> 2009-11-26okay
> 2009-11-27okay
> 2009-11-28okay
> 2009-11-29okay
> 2009-11-30okay
> 2009-12-01okay
> 2009-12-02okay
> 2009-12-03okay
> 2009-12-04okay
> 2009-12-05okay
> 2009-12-06okay
> 2009-12-07okay
> 2009-12-08okay
> 2009-12-09okay
> 2009-12-10okay
> 2009-12-11okay
> 2009-12-12okay
> 2009-12-13okay
> 2009-12-14okay
> 2009-12-15okay
> 2009-12-16okay
> 2009-12-17okay
> 2009-12-18okay
> 2009-12-19okay
> 2009-12-20okay
> 2009-12-21okay
> 2009-12-22okay
> 2009-12-23okay
> 2009-12-24okay
> 2009-12-25okay
> 2009-12-26okay
> 2009-12-27okay
> 2009-12-28okay
> 2009-12-29okay
> 2009-12-30okay
> 2009-12-31okay
> 2010-01-01okay
> 2010-01-02okay
> 2010-01-03okay
> 2010-01-04okay
> 2010-01-05okay
> 2010-01-06okay
> 2010-01-07okay
> 2010-01-08okay
> 2010-01-09okay
> 2010-01-10okay
> 2010-01-11okay
> 2010-01-12okay
> 2010-01-13okay
> 2010-01-14okay
> 2010-01-15okay
> 2010-01-16okay
> 2010-01-17okay
> 2010-01-18okay
> 2010-01-19okay
> 2010-01-20okay
> 2010-01-21okay
> 2010-01-22okay
> 2010-01-23okay
> 2010-01-24okay
> 2010-01-25okay
> 2010-01-26okay
> 2010-01-27okay
> 2010-01-28okay
> 2010-01-29okay
> 2010-01-30okay
> 2010-01-31okay
> 2010-02-01okay
> 2010-02-02okay
> 2010-02-03okay
> 2010-02-04okay
> 2010-02-05okay
> 2010-02-06okay
> 2010-02-07okay
> 2010-02-08okay
> 2010-02-09okay
> 2010-02-10okay
> 2010-02-11okay
> 2010-02-12okay
> 2010-02-13okay
> 2010-02-14okay
> 2010-02-15okay
> 2010-02-16okay
> 2010-02-17okay
> 2010-02-18okay
> 2010-02-19okay
> 2010-02-20okay
> 2010-02-21okay
> 2010-02-22okay
> 2010-02-23okay
> 2010-02-24okay
> 2010-02-25okay
> 2010-02-26okay
> 2010-02-27okay
> 2010-02-28okay
> 2010-03-01okay
> 2010-03-02okay
> 2010-03-03okay
> 2010-03-04okay
> 2010-03-05okay
> 2010-03-06okay
> 2010-03-07okay
> 2010-03-08okay
> 2010-03-09okay
> 2010-03-10okay
> 2010-03-11okay
> 2010-03-12okay
> 2010-03-13okay
> 2010-03-14okay
> 2010-03-15okay
> 2010-03-16okay
> 2010-03-17okay
> 2010-03-18okay
> 2010-03-19okay
> 2010-03-20okay
> 2010-03-21okay
> 2010-03-22okay
> 2010-03-23okay
> 2010-03-24okay
> 2010-03-25okay
> 2010-03-26okay
> 2010-03-27okay
> 2010-03-28okay
> 2010-03-29okay
> 2010-03-30okay
> 2010-03-31okay
> 2010-04-01okay
> 2010-04-02okay
> 2010-04-03okay
> 2010-04-04okay
> 2010-04-05okay
> 2010-04-06okay
> 2010-04-07okay
> 2010-04-08okay
> 2010-04-09okay
> 2010-04-10okay
> 2010-04-11okay
> 2010-04-12okay
> 2010-04-13okay
> 2010-04-14okay
> 2010-04-15okay
> 2010-04-16okay
> 2010-04-17okay
> 2010-04-18okay
> 2010-04-19okay
> 2010-04-20okay
> 2010-04-21okay
> 2010-04-22okay
> 2010-04-23okay
> 2010-04-24okay
> 2010-04-25okay
> 2010-04-26okay
> 2010-04-27okay
> 2010-04-28okay
> 2010-04-29okay
> 2010-04-30okay
> 2010-05-01okay
> 2010-05-02okay
> 2010-05-03okay
> 2010-05-04okay
> 2010-05-05okay
> 2010-05-06okay
> 2010-05-07okay
> 2010-05-08okay
> 2010-05-09okay
> 2010-05-10okay
> 2010-05-11okay
> 2010-05-12okay
> 2010-05-13okay
> 2010-05-14okay
> 2010-05-15okay
> 2010-05-16okay
> 2010-05-17okay
> 2010-05-18okay
> 2010-05-19okay
> 2010-05-20okay
> 2010-05-21okay
> 2010-05-22okay
> 2010-05-23okay
> 2010-05-24okay
> 2010-05-25okay
> 2010-05-26okay
> 2010-05-27okay
> 2010-05-28okay
> 2010-05-29okay
> 2010-05-30okay
> 2010-05-31okay
> 2010-06-01okay
> 2010-06-02okay
> 2010-06-03okay
> 2010-06-04okay
> 2010-06-05okay
> 2010-06-06okay
> 2010-06-07okay
> 2010-06-08okay
> 2010-06-09okay
> 2010-06-10okay
> 2010-06-11okay
> 2010-06-12okay
> 2010-06-13okay
> 2010-06-14okay
> 2010-06-15okay
> 2010-06-16okay
> 2010-06-17okay
> 2010-06-18okay
> 2010-06-19okay
> 2010-06-20okay
> 2010-06-21okay
> 2010-06-22okay
> 2010-06-23okay
> 2010-06-24okay
> 2010-06-25okay
> 2010-06-26okay
> 2010-06-27okay
> 2010-06-28okay
> 2010-06-29okay
> 2010-06-30okay
> 2010-07-01okay
> 2010-07-02okay
> 2010-07-03okay
> 2010-07-04okay
> 2010-07-05okay
> 2010-07-06okay
> 2010-07-07okay
> 2010-07-08okay
> 2010-07-09okay
> 2010-07-10okay
> 2010-07-11okay
> 2010-07-12okay
> 2010-07-13okay
> 2010-07-14okay
> 2010-07-15okay
> 2010-07-16okay
> 2010-07-17okay
> 2010-07-18okay
> 2010-07-19okay
> 2010-07-20okay
> 2010-07-21okay
> 2010-07-22okay
> 2010-07-23okay
> 2010-07-24okay
> 2010-07-25okay
> 2010-07-26okay
> 2010-07-27okay
> 2010-07-28okay
> 2010-07-29okay
> 2010-07-30okay
> 2010-07-31okay
> 2010-08-01okay
> 2010-08-02okay
> _______________________________________________
> regex-coach site list
> regex-coach at common-lisp.net
> http://common-lisp.net/mailman/listinfo/regex-coach
>




More information about the regex-coach mailing list