Thread Reguläre Ausdrücke durch anderes ersetzten... (59 answers)
Opened by ppm1 at 2004-02-16 23:16

Crian
 2004-02-20 11:29
#80144 #80144
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
So, hier die Testergebnisse (allerdings nur mit 100_000 Testdurchläufen, wenn ich heute Abend daran denke, alss ich mal übers Wochenende eine größere Menge (Zahlen und Arrayelemente) durchlaufen):

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl

use strict;
use Benchmark;

my @text = ('+5000*',
           'ein langer Text ohne solche Rechenoperationen...bla fasel laber schwaller sabbel erzähl ...',
           '8947573849575563542325375869676545343423232425347585764554534232432452673740-',
           '8947573849575563542325375869676545343423232425347585764554534232432452673740+',
           '8947573849575563542325375869676545343423232425347585764554534232432452673740*',
           '8947573849575563542325375869676545343423232425347585764554534232432452673740/',
           '89475738495755635423253758696765453434232324253475857645545342324324526737401',
           '-9475738495755635423253758696765453434232324253475857645545342324324526737401',
           '+9475738495755635423253758696765453434232324253475857645545342324324526737401',
           '*9475738495755635423253758696765453434232324253475857645545342324324526737401',
           '/9475738495755635423253758696765453434232324253475857645545342324324526737401',
          );

for (@text) {
   print "timethesis für '$_'\n";

   timethese(100_000, {
             A => sub {
                        if (m~(?:-|\+|\*|/)~) {}
                      },
             B => sub {
                       if (m~-~ or m~\+~ or m~\*~ or m~/~) {}
                      },
             C => sub {
                        if (m~[-+*/]~) {}
                      },
             D => sub {
                       if (m~[-]~ or m~[+]~ or m~[*]~ or m~[/]~) {}
                      },
             E => sub {
                       if (index($_, '-') > -1 or
                           index($_, '+') > -1 or
                           index($_, '*') > -1 or
                           index($_, '/') > -1) {}
                      },
            });
}


Ergebnis:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
timethesis für '+5000*'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  6 wallclock secs ( 4.27 usr +  1.33 sys =  5.59 CPU) @ 17876.30/s (n=100000)
        B:  6 wallclock secs ( 4.23 usr +  1.30 sys =  5.53 CPU) @ 18083.18/s (n=100000)
        C:  6 wallclock secs ( 4.59 usr +  0.95 sys =  5.55 CPU) @ 18027.76/s (n=100000)
        D:  6 wallclock secs ( 4.30 usr +  1.27 sys =  5.56 CPU) @ 17975.91/s (n=100000)
        E:  6 wallclock secs ( 4.09 usr +  1.44 sys =  5.53 CPU) @ 18079.91/s (n=100000)
timethesis für 'ein langer Text ohne solche Rechenoperationen...bla fasel laber schwaller sabbel erzähl ...'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  4 wallclock secs ( 4.00 usr +  1.42 sys =  5.42 CPU) @ 18443.38/s (n=100000)
        B:  4 wallclock secs ( 4.41 usr +  1.14 sys =  5.55 CPU) @ 18027.76/s (n=100000)
        C:  5 wallclock secs ( 4.33 usr +  1.27 sys =  5.59 CPU) @ 17876.30/s (n=100000)
        D:  6 wallclock secs ( 4.42 usr +  1.17 sys =  5.59 CPU) @ 17876.30/s (n=100000)
        E:  6 wallclock secs ( 4.16 usr +  1.47 sys =  5.62 CPU) @ 17777.78/s (n=100000)
timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740-'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  6 wallclock secs ( 4.22 usr +  1.19 sys =  5.41 CPU) @ 18494.54/s (n=100000)
        B:  6 wallclock secs ( 4.25 usr +  1.20 sys =  5.45 CPU) @ 18338.53/s (n=100000)
        C:  6 wallclock secs ( 4.52 usr +  1.08 sys =  5.59 CPU) @ 17876.30/s (n=100000)
        D:  4 wallclock secs ( 4.25 usr +  1.28 sys =  5.53 CPU) @ 18083.18/s (n=100000)
        E:  5 wallclock secs ( 4.31 usr +  1.28 sys =  5.59 CPU) @ 17873.10/s (n=100000)
timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740+'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  6 wallclock secs ( 4.22 usr +  1.30 sys =  5.51 CPU) @ 18135.65/s (n=100000)
        B:  6 wallclock secs ( 4.53 usr +  0.89 sys =  5.42 CPU) @ 18439.98/s (n=100000)
        C:  6 wallclock secs ( 4.22 usr +  1.28 sys =  5.50 CPU) @ 18178.51/s (n=100000)
        D:  6 wallclock secs ( 4.44 usr +  1.23 sys =  5.67 CPU) @ 17630.47/s (n=100000)
        E:  5 wallclock secs ( 4.27 usr +  1.30 sys =  5.56 CPU) @ 17975.91/s (n=100000)
timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740*'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  6 wallclock secs ( 4.08 usr +  1.44 sys =  5.52 CPU) @ 18132.37/s (n=100000)
        B:  6 wallclock secs ( 4.13 usr +  1.42 sys =  5.55 CPU) @ 18027.76/s (n=100000)
        C:  6 wallclock secs ( 4.28 usr +  1.28 sys =  5.56 CPU) @ 17975.91/s (n=100000)
        D:  6 wallclock secs ( 4.22 usr +  1.38 sys =  5.59 CPU) @ 17879.49/s (n=100000)
        E:  5 wallclock secs ( 4.28 usr +  1.30 sys =  5.58 CPU) @ 17924.36/s (n=100000)
timethesis für '8947573849575563542325375869676545343423232425347585764554534232432452673740/'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  5 wallclock secs ( 4.36 usr +  1.17 sys =  5.53 CPU) @ 18076.64/s (n=100000)
        B:  6 wallclock secs ( 3.98 usr +  1.53 sys =  5.52 CPU) @ 18132.37/s (n=100000)
        C:  6 wallclock secs ( 4.47 usr +  1.16 sys =  5.62 CPU) @ 17780.94/s (n=100000)
        D:  6 wallclock secs ( 4.33 usr +  1.34 sys =  5.67 CPU) @ 17630.47/s (n=100000)
        E:  4 wallclock secs ( 4.45 usr +  1.19 sys =  5.64 CPU) @ 17727.35/s (n=100000)
timethesis für '89475738495755635423253758696765453434232324253475857645545342324324526737401'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  5 wallclock secs ( 4.27 usr +  1.22 sys =  5.48 CPU) @ 18234.87/s (n=100000)
        B:  6 wallclock secs ( 4.47 usr +  1.05 sys =  5.52 CPU) @ 18129.08/s (n=100000)
        C:  6 wallclock secs ( 4.28 usr +  1.30 sys =  5.58 CPU) @ 17927.57/s (n=100000)
        D:  6 wallclock secs ( 4.47 usr +  1.17 sys =  5.64 CPU) @ 17727.35/s (n=100000)
        E:  6 wallclock secs ( 4.38 usr +  1.20 sys =  5.58 CPU) @ 17924.36/s (n=100000)
timethesis für '-9475738495755635423253758696765453434232324253475857645545342324324526737401'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  4 wallclock secs ( 4.36 usr +  1.16 sys =  5.52 CPU) @ 18132.37/s (n=100000)
        B:  5 wallclock secs ( 4.33 usr +  1.20 sys =  5.53 CPU) @ 18079.91/s (n=100000)
        C:  6 wallclock secs ( 4.47 usr +  1.16 sys =  5.62 CPU) @ 17780.94/s (n=100000)
        D:  6 wallclock secs ( 4.33 usr +  1.30 sys =  5.63 CPU) @ 17777.78/s (n=100000)
        E:  6 wallclock secs ( 4.59 usr +  1.05 sys =  5.64 CPU) @ 17727.35/s (n=100000)
timethesis für '+9475738495755635423253758696765453434232324253475857645545342324324526737401'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  4 wallclock secs ( 4.38 usr +  1.08 sys =  5.45 CPU) @ 18338.53/s (n=100000)
        B:  5 wallclock secs ( 4.11 usr +  1.41 sys =  5.52 CPU) @ 18132.37/s (n=100000)
        C:  6 wallclock secs ( 4.25 usr +  1.31 sys =  5.56 CPU) @ 17975.91/s (n=100000)
        D:  6 wallclock secs ( 4.52 usr +  1.19 sys =  5.70 CPU) @ 17534.63/s (n=100000)
        E:  5 wallclock secs ( 4.23 usr +  1.28 sys =  5.52 CPU) @ 18132.37/s (n=100000)
timethesis für '*9475738495755635423253758696765453434232324253475857645545342324324526737401'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  6 wallclock secs ( 4.30 usr +  1.19 sys =  5.48 CPU) @ 18231.54/s (n=100000)
        B:  4 wallclock secs ( 4.49 usr +  1.08 sys =  5.56 CPU) @ 17975.91/s (n=100000)
        C:  5 wallclock secs ( 4.38 usr +  1.20 sys =  5.58 CPU) @ 17927.57/s (n=100000)
        D:  6 wallclock secs ( 4.50 usr +  1.13 sys =  5.62 CPU) @ 17777.78/s (n=100000)
        E:  6 wallclock secs ( 4.47 usr +  1.13 sys =  5.59 CPU) @ 17876.30/s (n=100000)
timethesis für '/9475738495755635423253758696765453434232324253475857645545342324324526737401'
Benchmark: timing 100000 iterations of A, B, C, D, E...
        A:  6 wallclock secs ( 4.08 usr +  1.42 sys =  5.50 CPU) @ 18181.82/s (n=100000)
        B:  6 wallclock secs ( 4.33 usr +  1.23 sys =  5.56 CPU) @ 17979.14/s (n=100000)
        C:  4 wallclock secs ( 4.24 usr +  1.27 sys =  5.50 CPU) @ 18178.51/s (n=100000)
        D:  5 wallclock secs ( 4.17 usr +  1.38 sys =  5.55 CPU) @ 18031.01/s (n=100000)
        E:  6 wallclock secs ( 4.33 usr +  1.22 sys =  5.55 CPU) @ 18031.01/s (n=100000)


Was man eigentlich sieht ist, dass es wirklich furchtbar egal ist, es sei denn diese Operation wäre ein absolutes nachgewiesenes Nadelöhr.

Deshalb sollte man IMHO die Varaiante wählen, die einem vom Lesen / Schreiben / Verstehen am sinnvollsten erscheint.

Für den geübten SAS-Programmier wäre das wohl die Index-Variante, ich würde wahrscheinlich Model A vorziehen. Aber das muss jeder selber wissen.\n\n

<!--EDIT|Crian|1077269569-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Reguläre Ausdrücke durch anderes ersetzten...