in reply to Need to match number other than 1

I need to match a number other than 1. The input can be even four or five digit. But it should allow when it is not number 1

After trying to interpret your question (what is meant by "number 1" anyway), I'll add another version of the "detection of 1 game":

... my $num1 = qr{^ (?> ([\.\d]+) ) (??{$1 == '1' ? '(?!)' : '' }) }x; my $txt1 = qr{^ (?> ([\.\d]+) ) (??{$1 eq '1' ? '(?!)' : '' }) }x; my @stuff = qw' 0101 1 123 1.1 01 222 21 1.000 '; print map $_ . "\t as num: " . (/$num1/ ? 'ok' : '--') . "\t as txt: " . (/$txt1/ ? 'ok' : '--') . "\n", @stuff; ...

Regards

mwa

Replies are listed 'Best First'.
Re^2: Need to match number other than 1
by lodin (Hermit) on Nov 29, 2007 at 17:28 UTC

    You don't have to generate any code. The (?(COND)TRUE|FALSE) assertion fits the glove here. $^N can be used instead of $1 here, making it copy-paste safe.

    I'd also like to draw some attention to Regexp::Common::number. These changes would make

    my $num1 = qr{^ (?> ([\.\d]+) ) (??{$1 == '1' ? '(?!)' : '' }) }x;
    become
    use Regexp::Common qw/ number /; my $num1 = qr{^ (?> ($RE{num}{dec}) ) (?(?{ $^N != '1' })|(?!)) }x;
    I reversed the logic in the COND block so that it reads better to me. "Match a number, the number isn't 1, done".

    lodin

Re^2: Need to match number other than 1
by ysth (Canon) on Nov 30, 2007 at 16:03 UTC
    I tried that and got this warning:
    Argument "\x{d6d}\x{bef}" isn't numeric in numeric eq (==) at (re_eval + 2) line 1.
    :)