http://qs321.pair.com?node_id=240601
Category: Misc
Author/Contact Info sutch
Description: After over a year away from Perl (doing PHP coding), I'm happy to start using Perl again. I just put this script together to help another developer test regular expressions.

Comments are welcome.

#!/usr/bin/perl -w
# script to test regular expressions.

use strict;

# assign the regular expression
my $re = qr/^(\$-|-\$|\$)(\d+|(\d*\.\d\d))$/;

# assign valid strings
my @valid = (
  '$1',
  '$1.11',
  '$.11',
  '-$1',
  '-$1.11',
  '-$.11',
  '$-1',
  '$-1.11',
  '$-.11',
);

# assign invalid strings
my @invalid = (
  '',
  '$',
  '$1.1',
  '$1.111',
  '$.1',
  '$.111',
  '-',
  '-$',
  '-$1.1',
  '-$1.111',
  '-$.1',
  '-$.111',
  '$-',
  '$-1.1',
  '$-1.111',
  '$-.1',
  '$-.111',
);

# leave alone
my $mismatches = 0;
foreach my $valid (@valid) {
  if ( $valid !~ $re ) {
    print "valid string doesn't match: $valid\n";
    $mismatches += 1;
  }
}
foreach my $invalid (@invalid) {
  if ( $invalid =~ $re ) {
    print "invalid string does match: $invalid\n";
    $mismatches += 1;
  }
}
print "$re had $mismatches mismatches with the " . (0 + @valid + @inva
+lid) . " test cases\n";
Replies are listed 'Best First'.
Re: Regex Tester
by hiseldl (Priest) on Mar 06, 2003 at 03:32 UTC
Re: Regex Tester
by perlguy (Deacon) on Mar 06, 2003 at 08:36 UTC
    why not make your code a little bit more readable (and a bit more perl-ish), by changing this:
    # assign valid strings my @valid = ( '$1', '$1.11', '$.11', '-$1', '-$1.11', '-$.11', '$-1', '$-1.11', '$-.11', );
    to something like this, using the qw() operator:
    # assign valid strings my @valid = qw( $1 $1.11 $.11 -$1 -$1.11 -$.11 $-1 $-1.11 $-.11 );
    Of course, if you ever have any spaces in your future tests, this goes mostly out the window, but since your strings seem to fit just fine, I would say it will be a little easier to read and maintain. So long as no one reads the $- and $1 as variables, you should be good to go.
Re: Regex Tester
by Aristotle (Chancellor) on Mar 09, 2003 at 04:35 UTC