in reply to Re^2: pricing and phone number regexes
in thread pricing and phone number regexes

I just did some checking and testing (finally had a moment to do it). I've fixed both RE's. Actually the second one worked all along, but had a problem with allowing prices with more than two decimal places. That's fixed. And the phone number RE was missing a close paren.

Anyway, it's sorted out now, and the versions now appearing in my original followup are correct, still with the limitations I mentioned before.


Dave

Replies are listed 'Best First'.
Re^4: pricing and phone number regexes
by coldfingertips (Pilgrim) on Jun 05, 2004 at 04:41 UTC
    Thanks again for the regexes but I can't seem to get them to work..either of them. I must be doing something wrong, can you or anyone else take a quick look to see what it might be? It's still use of uninitialized value errors.
    $/="====\n\n"; open (READFROM, "$readfrom") or die "Cannot open $readfrom: $!"; open (WRITETO, ">$writeto") or die "Cannot open $writeto: $!"; while ( <READFROM> ) { chomp; $_ =~ m/\$ (?:\d{1,3},?)+ (?:\.\d{0,2})? (?![.\d]) /x; my $price = "$2"; print "$price\n"; } close (WRITETO) or die "Cannot close $writeto: $!"; close (READFROM) or die "Cannot close $readfrom: $!";
      Ah, it's the capturing. I used non-capturing parens. Wrap capturing parens around the guts of each RE and you'll have it... but you'll then find the value you want in $1.

      Also, don't rely on $1 unless you've verified that there actually was a match.

      Sorry for the confusion. Hope this helps.

      Just to clarify, here's the money RE with capturing parens:

      print "$1" if m/ ( \$ (?:\d{1,3},?)+ (?:\.\d{0,2})? (?![.\d]) ) /x;

      Note the capturing parens surrounding everything else, as well as the conditional 'if' to prevent your relying on $1 unless the match really occurred.

      If you don't mind the performance hit, you could have also avoided the capturing parens by using the $& special variable.


      Dave