[Dresden-pm] Reguläre Ausdrücke - Suchen und Ersetzen von Worten

Torsten Knorr create-soft at tiscali.de
So Aug 17 01:48:41 PDT 2008


Aristotle Pagaltzis Tue, 12 Aug 2008 16:16:46 +0200

> my %insertion;
>    for my $kw ( @keywords ) {
>        my ( $rx ) =3D map qr/$_/i, quotemeta $kw;

 my $rx = qr/\Q$kw\E/i;

>        while ( $text =3D~ /$rx/g ) {

Wenn wir den Text mit jedem Schlüsselwort einzeln durchsuchen
haben wir zwei Treffer ("Affe" und "Affe klettert") an einer Stelle.
Also 3 Positionen gespeichert.
Das bringt die Sache durcheinander.
Wir brauchen also den längsten Treffer und das liefert uns Perls-NFA nicht.
Mann kann zwar Perl zwingen weiterzusuchen (?!) aber das wird fummlig.
Falls wir auf eine andere Sprache, die DFA unterstütz, ausweichen wird es
einfacher.
Steffens Ansatz mit dem längsten Schlüsselwort die Suche zu beginnen
ist für mich der bessere. Mann könnter die Suche selbst noch etwas
optimieren also nicht /\baffe|affe klettert\b/ sondern /\baffe( klettert)?\b/.
Ob sich das lohnt hängt von der länge des Textes und der Anzahl von
Schlüsselwörtern ab.

>            push    @{ $insertion{ $-[0] } }, '<a href=3D"#">';

 $insertion{$-[0]} = '<a href=3D"#">';

>            unshift @{ $insertion{ $+[0] } }, '</a>';

 $insertion{$+[0]} = '</a>';

>        }
>    }
  T.


Mehr Informationen über die Mailingliste Dresden-pm