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

I can't seem to get any of those to work, they keep producing use uninitialized errors when I try to print the results. I know you said it was unterested but can you tell me where the missing ) is supposed to go in the phone regex? I've tried a few spots but I can't figure out where it's supposed to be.

Thanks!

Replies are listed 'Best First'.
Re^3: pricing and phone number regexes
by davido (Cardinal) on Jun 05, 2004 at 04:02 UTC
    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

      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