Julius Mittenzwei: RegExp - Erkennen von HTML-Tags

Hallo ...

Seit Tagen quäl ich mich mit folgendem Problem rum:

Ich habe ein Stück HTML-Seite in $_ und möchte darin alle Wörter $wort rot färben.

Ungefähr so:      s/$wort/"<font color="#FF0000">".$&."</font>"/egisx;

Das geht allerdings nur solange gut, solange er keine Übereinstimmungen innerhalb von HTML-Tags findet. Kann mit irgendeiner einen Tip geben, wie man dieses Problem löst? Wie kann ich herausfinden, ob sich ein gefundenes Wort innerhalb von <> befindet?

Danke schonmal
Julius

  1. hi!

    Ich habe ein Stück HTML-Seite in $_ und möchte darin alle Wörter $wort rot färben.
    Ungefähr so:      s/$wort/"<font color="#FF0000">".$&."</font>"/egisx;

    Das geht allerdings nur solange gut, solange er keine Übereinstimmungen innerhalb von
    HTML-Tags findet. Kann mit irgendeiner einen Tip geben, wie man dieses Problem löst?

    Vielleicht etwas in der Art:
      s/([>^][^<]*)($wort)/$1<font ...>$2</font>/g;

    Ob das so funktioniert oder überhaupt der richtige Ansatz ist, weiß ich allerdings nicht ;-)

    bye, Frank!

  2. Hi,

    Ich habe ein Stück HTML-Seite in $_ und möchte darin alle Wörter $wort rot färben.

    Ungefähr so:      s/$wort/"<font color="#FF0000">".$&."</font>"/egisx;

    mit einer einzelnen RegExp wohl nicht, aber mit zweien eventuell:

    s/>[^<]*$wort/<font color="#FF0000">$wort</font>/gi; # IMHO brauchst Du esx nicht

    Hier werden zunächst nur $wort's nach einem HTML-Tag gesucht. Dann brauchst Du noch:

    s/[1]*$wort/<font color="#FF0000">$wort</font>/gi;

    Ich bin aber nicht sicher, ob dies dann zu 100% arbeitet, irgendwie scheint es noch Probleme zu geben, wenn z.B. mehrere $wort's hintereinander stehen. Vielleicht reicht es aber als Basis, u.a. auch wenn Du mit if-Abfragen arbeitest.

    Cheatah


    1. ^< ↩︎