in reply to Matching floats according to perlfaq4
Update: Fixed to avoid matching "+."
/^[+-]?(?=\.?\d)\d*\.?\d*(?:[eE][+-]?\d+)?$/Update: My test code with additional cases.
#!/usr/bin/perl -w use strict; my @good = qw( 0e0 0 +0 -0 1. 0.14 .14 1.24e5 24e5 -24e-5); my @bad = ('', qw(. +. 1e e1 2.3. 2.3.4 1..2 .1.1 e.1 e1.1 .1a 1.a 1.1a 1a +.1 1.a1)); my $pat = qr/^[+-]?(?=\.?\d)\d*\.?\d*(?:[eE][+-]?\d+)?$/; print "GOOD Tests (Should match.)\n"; print /$pat/ ? ' ': 'no ', "match: '$_'\n" for @good; print "\nBAD Tests (Should not match.)\n"; print /$pat/ ? ' ': 'no ', "match: '$_'\n" for @bad;
Update: This can be made even shorter than the solution posted by an Anonymous Monk if you change it to use capturing parens and the /i modifier instead of the [Ee] character class as he does in his.
/^[+-]?(?=\.?\d)\d*\.?\d*(e[+-]?\d+)?$/iIn response to and agreement with demerphq's reply, I don't actually recommend this last one at all. I just wanted to show that it could be golfed further.
-sauoq "My two cents aren't worth a dime.";
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: (Regex Golf) Re: Matching floats according to perlfaq4
by demerphq (Chancellor) on Sep 27, 2002 at 11:49 UTC | |
by sauoq (Abbot) on Sep 27, 2002 at 15:56 UTC |