Beim Durchführen von Textersetzungen mit preg_replace in HTML-Dokumenten ist es wichtig, eine versehentliche Änderung von HTML-Tags zu vermeiden. Betrachten Sie beispielsweise die Aufgabe, bestimmte Wörter in einzuschließen. Tags:
<p>I am making a preg_replace on html page. My pattern is aimed to add surrounding tag to some words in html. However, sometimes my regular expression modifies html tags...</p>
Der folgende reguläre Ausdruck versucht, „yasar“ durch zu ersetzen. Tags:
preg_replace("/(asf|gfd|oyws)/", '<span>
Leider stimmt diese Regex auch mit „yasar“ innerhalb des Alt-Attributs eines Anker-Tags überein, was zu unerwünschten Änderungen führt.
Um solche unerwünschten Übereinstimmungen zu verhindern, kann eine Behauptung verwendet werden. Durch die Behauptung, dass das gesuchte Wort (z. B. „asf“, „gfd“ oder „oyws“) nicht vor einem „<“ erscheint oder nach einem „>“ können wir Übereinstimmungen innerhalb von HTML-Tags effektiv ausschließen. Hier ist eine modifizierte Regex, die diesen Ansatz verwendet:
/(asf|foo|barr)(?=[^>]*(<|$))/
Die Lookahead-Assertion (?=[^>]*(<|$)) stellt sicher, dass dem Wort entweder ein HTML-Tag-Öffner folgen muss ("<") oder das Ende der Zeichenfolge (dargestellt durch "$"). Dadurch werden Übereinstimmungen innerhalb von Tags effektiv ausgeschlossen.
Durch die Einbindung dieser Behauptung in den regulären Ausdruck können wir Ersetzungen durchführen, ohne HTML-Tags zu ändern, und sicherstellen, dass yasar im Alt-Attribut unberührt bleibt:
<a href="example.com" alt="yasar home page">yasar</a>
Das obige ist der detaillierte Inhalt vonWie kann ich PHP Regex verwenden, um die Änderung von HTML-Tags während der Textersetzung zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!