PHP Regex außerhalb von HTML-Tags übereinstimmen

7

Ich mache eine preg_replace auf HTML-Seite. Mein Muster zielt darauf ab, einigen Wörtern in html ein umgebendes Etikett hinzuzufügen. Manchmal ändert mein regulärer Ausdruck jedoch HTML-Tags. Zum Beispiel, wenn ich versuche, diesen Text zu ersetzen:

%Vor%

Damit yasar <span class="selected-word">yasar</span> liest, ersetzt mein regulärer Ausdruck auch yasar im Alt-Attribut des Anchor-Tags. Der aktuelle preg_replace() , den ich benutze, sieht so aus:

%Vor%

Wie kann ich einen regulären Ausdruck erstellen, damit er nicht mit einem HTML-Tag übereinstimmt?

    
yasar 25.10.2011, 15:33
quelle

4 Antworten

20

Sie können eine Assertion dafür verwenden, da Sie nur sicherstellen müssen, dass die gesuchten Wörter irgendwann nach einem > oder vor einem < auftreten. Der letztere Test ist leichter zu bewerkstelligen, da Lookahead-Assertions eine variable Länge haben können:

%Vor%

Siehe auch Ссылка für eine schöne Erklärung dieser Assertionssyntax.

    
mario 25.10.2011, 15:48
quelle
6

Yasar, diese Frage wieder auferstehen lassen, weil sie eine andere Lösung hatte, die nicht erwähnt wurde.

Anstatt nur zu prüfen, ob das nächste Tag-Zeichen ein öffnendes Tag ist, überspringt diese Lösung alle <full tags> .

Mit all den Disclaimern über die Verwendung von Regex zum Parsen von HTML, hier ist die Regex:

%Vor%

Hier ist eine Demo . Im Code sieht das so aus:

%Vor%

Hier ist eine Online-Demo dieses Codes.

Referenz

  1. Wie man das Muster außer in den Situationen s1, s2, s3
  2. abgleicht
  3. Wie wird ein Muster angepasst, es sei denn ...
zx81 15.05.2014 01:37
quelle
0

Dies könnte die Art von Sache sein, nach der Sie suchen: Ссылка Generell würde ich davon abraten. Eine bessere Alternative ist es, alle HTML-Tags zu entfernen und stattdessen auf BBcode zu setzen, wie zum Beispiel:

%Vor%

Allerdings schätze ich, dass dies mit dem, was Sie versuchen, nicht gut funktioniert.

Eine andere Option ist HTML Purifier, siehe: Ссылка

    
user542603 25.10.2011 15:42
quelle
0

Von Anfang an sollte das funktionieren:

%Vor%

Aber ich weiß nicht, wie sicher das wäre. Ich stelle nur eine Möglichkeit vor:)

    
bosniamaj 25.10.2011 15:51
quelle

Tags und Links