#!/usr/bin/perl -- use strict; use warnings; use Regexp::Assemble; my( @usd ) = ( q[$0,000.00], q[$0000], q[$999], q[$1,000], q[$1,000.00], q[$2,000], q[$9,000], q[$10,000], q[$10,00000.00], q[$100,000], q[$999,000], q[$1,000,000], q[$1,234,567,890.00], ); sub refit { my( $re ) = Regexp::Assemble->new; $re->add(shift) while @_; $re=$re->re; print "\n\n$re\n"; for my $usd ( @usd ){ no warnings 'uninitialized'; printf "[ %20s ]= %d\n", $usd, $usd =~ $re; } print '-' x 50 , "\n\n"; } refit( '^\$1,?\d\d\d(?:\.\d\d)?$', # $1,000 $1,000.00 '^\$[2-9],?\d\d\d(?:\.\d\d)?$', # $2,000 $9,000 '^\$\d\d,?\d\d\d(?:\.\d\d)?$', # $10,000 $99,000 '^\$\d\d\d,?\d\d\d(?:\.\d\d)?$', # $100,000 $999,000 '^\$\d,?(?:\d\d\d,?)+\d\d\d(?:\.\d\d)?$', # $1,000,000 $1,234,567,890.00 ); refit( '^\$1,?\d\d\d(?:\.\d\d)?$', # $1,000 $1,000.00 '^\$[2-9],?\d\d\d(?:\.\d\d)?$', # $2,000 $9,000 '^\$\d\d[\d,]*?\d\d\d(?:\.\d\d)?$', # $10,000 $10,00000.00 ); __END__ (?-xism:^\$(?:\d(?:,?(?:\d\d\d,?)+|\d?\d,?)|(?:[2-9]|1),?)\d\d\d(?:\.\d\d)?$) [ $0,000.00 ]= 0 [ $0000 ]= 0 [ $999 ]= 0 [ $1,000 ]= 1 [ $1,000.00 ]= 1 [ $2,000 ]= 1 [ $9,000 ]= 1 [ $10,000 ]= 1 [ $10,00000.00 ]= 0 [ $100,000 ]= 1 [ $999,000 ]= 1 [ $1,000,000 ]= 1 [ $1,234,567,890.00 ]= 1 -------------------------------------------------- (?-xism:^\$(?:(?:[2-9]|1),?|\d\d[\d,]*?)\d\d\d(?:\.\d\d)?$) [ $0,000.00 ]= 0 [ $0000 ]= 0 [ $999 ]= 0 [ $1,000 ]= 1 [ $1,000.00 ]= 1 [ $2,000 ]= 1 [ $9,000 ]= 1 [ $10,000 ]= 1 [ $10,00000.00 ]= 1 [ $100,000 ]= 1 [ $999,000 ]= 1 [ $1,000,000 ]= 0 [ $1,234,567,890.00 ]= 0 --------------------------------------------------