Thread RegEx: nur Zahlen (12 answers)
Opened by pktm at 2004-05-22 19:10

Dubu
 2004-05-23 22:02
#82645 #82645
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=jan,22.05.2004, 22:42]
aber der regexp ist offensichtlich schneller...
[/quote]
Aber nur, so lange deine Regex auf nur eine einzelne Ziffer prueft. Das Ergebnis kehrt sich um, wenn wirklich auf Zahlen (d.h. mehrere Ziffern hintereinander) getestet wird.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
~/perl/test> cat nurzahlen.pl
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw/cmpthese/;

cmpthese(-5, {
   regexpZiffer => sub { my $var = '1555000000'; my $onlydigits = 1 if($var =~ m/^\d$/);},
   regexpStern  => sub { my $var = '1555000000'; my $onlydigits = 1 if($var =~ m/^\d*$/);},
   regexpPlus   => sub { my $var = '1555000000'; my $onlydigits = 1 if($var =~ m/^\d+$/);},
   regexpInv    => sub { my $var = '1555000000'; my $onlydigits = 1 unless ($var =~ m/\D/);},
   inttest      => sub { my $var = '1555000000'; my $onlydigits = 1 if(int($var) eq $var);},
});

~/perl/test> ./nurzahlen.pl
                 Rate regexpStern regexpPlus    inttest  regexpInv regexpZiffer
regexpStern  1049899/s          --        -2%        -4%       -28%         -37%
regexpPlus   1069469/s          2%         --        -2%       -27%         -36%
inttest      1096502/s          4%         3%         --       -25%         -35%
regexpInv    1459240/s         39%        36%        33%         --         -13%
regexpZiffer 1678905/s         60%        57%        53%        15%           --

Der schnellste Test (nach dem auf einzelne Ziffern) ist also der auf eine Nicht-Ziffer, gefolgt vom Vergleich mit int().
Letzterer hat aber einen anderen Nachteil: Er funktioniert nicht, wenn die Ziffernfolge mit einer Null anfaengt.

View full thread RegEx: nur Zahlen