Heim >Backend-Entwicklung >PHP-Tutorial >Wie verwende ich Regex, um zu vermeiden, dass Text in HTML-Tags während des Ersetzens geändert wird?

Wie verwende ich Regex, um zu vermeiden, dass Text in HTML-Tags während des Ersetzens geändert wird?

Barbara Streisand
Barbara StreisandOriginal
2024-12-01 22:54:11627Durchsuche

How to Use Regex to Avoid Modifying Text Inside HTML Tags During Replacement?

Regex zur Übereinstimmung außerhalb von HTML-Tags für selektives Tagging

Um Übereinstimmungen innerhalb von HTML-Tags zu verhindern, während preg_replace verwendet wird, um Tags zu bestimmten Wörtern hinzuzufügen Für eine HTML-Seite ist es wichtig, einen regulären Ausdruck zu definieren, der diese Bereiche ausschließt.

Original Muster:

preg_replace("/(asf|gfd|oyws)/", '<span>

Schwäche:

Das obige Muster stimmt auch mit Instanzen der Zielwörter innerhalb von HTML-Tags überein, was unerwünscht ist.

Verbessert Muster:

/(asf|foo|barr)(?=[^>]*(<|$))/

Aufschlüsselung:

  • (asf|foo|barr): Entspricht den Zielwörtern.
  • (?=): Lookahead-Behauptung, die sicherstellt, dass die Übereinstimmung früher auftritt das schließende HTML-Tag (
  • 1*: Entspricht Null oder mehr Zeichen (mit Ausnahme des schließenden HTML-Tags

Wie es Funktioniert:

Dieses Muster stimmt nur dann mit den Zielwörtern überein, wenn ihnen nicht unmittelbar die schließende spitze HTML-Klammer folgt. Dadurch wird der Abgleich außerhalb von HTML-Tags effektiv eingeschränkt und so unbeabsichtigte Änderungen innerhalb dieser Tags verhindert.

Beispiel:

Betrachten Sie den folgenden HTML-Code:

<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. For example, when I try to replace this text:</p>

<pre class="brush:php;toolbar:false"><a href="example.com" alt="yasar home page">yasar</a>

Mithilfe des erweiterten Musters wird das Zielwort „yasar“ abgeglichen und markiert, während die Instanz innerhalb des „alt“-Attributs des Anker-Tags dies tut unberührt bleiben:

<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. For example, when I try to replace this text:</p>

<pre class="brush:php;toolbar:false"><a href="example.com" alt="yasar home page">yasar</a>
So that yasar reads

  1. >

    Das obige ist der detaillierte Inhalt vonWie verwende ich Regex, um zu vermeiden, dass Text in HTML-Tags während des Ersetzens geändert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn