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:
Wie kann ich einen regulären Ausdruck erstellen, damit er nicht mit einem HTML-Tag übereinstimmt?
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:
Siehe auch Ссылка für eine schöne Erklärung dieser Assertionssyntax.
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
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: Ссылка
Tags und Links php regex pcre preg-replace