Thread Regexes: Geschwindigkeitsoptimierung (13 answers)
Opened by GoodFella at 2007-04-06 19:31

GoodFella
 2007-04-07 05:54
#75724 #75724
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Habe noch weitere Patterns getestet, unter anderem folgende Funktion, die die lansgamen \s* am Anfang und Ende meiner Regexes überflüssig machen soll:

Code (perl): (dl )
1
2
3
4
5
6
7
sub remove_wrapping_whitespaces
 {
  my $string = shift;
  $string =~ s/^\s+//;
  $string =~ s/\s+$//;
  return($string);
 }


Was ich ergoogeln konnte, ist das wohl die effektivste Methode dafür. Im Vergleich mit der qr//-Version ist diese aber deutlich schneller:

Code (perl): (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
#!/usr/bin/perl

use strict;
use warnings;
use Benchmark ':all';

my $original = ' Bla Test Jetzt kommen nochmal Leerzeichen         ';
my $string;
my $re1 = qr/^\s+/o;
my $re2 = qr/\s+$/o;

sub one 
 {
  $string = $original;
  $string =~ s/$re1//o;
  $string =~ s/$re2//o;
 }

sub two 
 {
  $string = $original;
  $string =~ s/^\s+//;
  $string =~ s/\s+$//;
 }

cmpthese (200000, { one => sub { &one; }, two => sub { &two; } } );


ergibt:

Quote
---------- Perl ----------
       Rate  one  two
one 261097/s   -- -10%
two 290698/s  11%   --

Output completed (2 sec consumed) - Normal Termination


(Habe mich schon an meine (Teil-)Monologe gewöhnt, sobald es etwas exotischer wird ^^)

[EDIT]
Das Entfernen der Whitespaces am Stringanfang und Ende zusammen mit dem Entfernen der /^\s* .. \s*$/ hat genau den Effekt gehabt, den ich wollte!!! 105 Zeilen pro Sekunde!!! :DDD\n\n

<!--EDIT|GoodFella|1175912293-->

View full thread Regexes: Geschwindigkeitsoptimierung