Regulärer Ausdruck für Verwendung in HTML

Foaly-I

Grünschnabel
Hallo,

Ich hab ein Regulären Ausdruck geschrieben, der Helfen soll, Wörter überall außer innerhalb von Tags, also innerhalb der < und > zu ersetzen und nicht in Überschriften. Leider funktioniert dieser nur bei Tags mit Attributen. Ich find und find den Fehler aber nicht!! Würde mich über bisschen Unterstützung freuen Hier mein RegEx:

PHP:
$pattern = "#(<\D[^>|^span|^h1|^h2]*[\s]?.[^>]*>[^<]*)".preg_quote($row['term'])."([^<]*<\/\D[^>]*>)#i";


<\D[^>|^span|^h1|^h2]*
Ein Tag, das nicht span oder h1 oder h2 ist

[\s]?.[^>]*
Hier versuche ich ihm zu sagen, dass er erst ein whitespace tolerieren soll und dann ein biliebiges Zeichen, außer das Ende des Tags.

[^<]*

Natürlich darf vor und nach dem Wort noch irgendetwas sein, außer ein neues Tag

<\/\D[^>]*>
Fast das selbe wie am Anfang, nur ohne Ausschluss von Tags, ohne Attribute und mit / am Anfang.
 
Hej Foaly-I,

Dein Beitrag ist schon eine Weile alt, vielleicht hast du es ja schon gelöst. Wenn nicht: es gibt zwei Dinge, an denen es aus meiner Sicht liegen könnte:

1. Der Unterausdruck für das optionale Leerzeichen.
Tipp: Ersetze
PHP:
"[\s]?"
mal durch
PHP:
"[[:space:]]?" // oder
"\s?"
2. Den Punkt direkt nach dem Ausdruck für das Leerzeichen müsstest du einfach weglassen können. Ich habe gerade ewig nach einem ähnlichen Ausdruck gesucht: eine beliebige Anzahl beliebiger Zeichen außer den spitzen Klammern, die ein HTML-Tag-Anfang oder -Ende markieren. Funktioniert hat es erst, als ich den Ausdruck auf das auszuschließende Zeichen reduziert habe. Also:
PHP:
"[^<]*"
sucht eine beliebige Anzahl beliebiger Zeichen außer der öffnenden spitzen Klammer.

Vielleicht hilft’s ja (noch).

Liebe Grüße,
27apricot.
 
Ein regulärer Ausdruck ist dafür zwar nicht vielleicht die beste Wahl, aber probier mal Folgendes:
PHP:
$pattern = '#(<([a-z]+(?!span|h1|h2))[^>]*>[^<]*?)'.preg_quote($row['term']).'([^<]*?</\\2>)#i';
 
Zurück