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

Ishka
 2004-02-16 23:50
#80104 #80104
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das Suchen mit regulären Ausdrücken ist sehr Rechenleistungsintensiv im Vergleich zum Addieren von zwei Zahlen. Aber es ist effizienter mit regulären Ausdrücken zu suchen, als mit sonst irgendetwas. Was langsam ist, ist daß reguläre Ausdrücke manchmal den ganzen string auswerten müssen. (und das g-Flag senkt die Geschwindigkeit natürlich deutlich - falls du es nicht brauchst. Falls du es doch brauchst, ist es allerdings meist die schnellste Lösung das über nen RegEx zu lösen).

Reguläre Ausdrücke sind in der Tat schneller, als man meist denkt - insbesondere ist die RegEx-Engine in Perl sehr hoch entwickelt.

Wenn dein Regulärer Ausdruck die Gestalt /sdfajk fads awefölk/ (langer konstanter Text, einige Zeichen darin mehrfach) hat, oder das zumindestens drin vorkommt, dann wird idR. nichteinmal jedes Zeichen des Strings abgefragt. Also ist /blahagd(?:miau|blubb)fdsjksanf/ auf jeden Fall schneller als /blahagd.*?fdsjksanf/

Allerdings sollte man sich darüber auch nicht alzu viele Gedanken machen - so knapp ist die Rechenleistung meist doch nicht bemessen.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}

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