Christian Kruse: Regex Auswertung

Beitrag lesen

Hallo Frank,

$text = "bla (treffer 1) laber (treffer 2) blub (treffer 3) und so weiter...";
   push @results, $& while $text =~ /(.*?)/g;
   print "$_\n" for @results;

Schlechtes Beispiel. Erstens zu kompliziert und zweitens ist die Verwendung
von $& boese[tm], warum kannst du in der perlfaq6 (Abschnitt Why does using $&,
$`, or $' slow my program down?) nachlesen. Drittens hast du einen Quantifier
ungreedy gemacht, was den RegEx auch verlangsamt. Einfacher und schneller waere:

my @results = $text =~ /(([^)]+))/g;

Das geht, weil der m///-Operator im Listenkontext eine Liste zurueck gibt, der
die in Klammern stehenden Matches enthaelt -- in diesem Fall also den gesuchten
Text.

Gruesse,
 CK