Maison >développement back-end >tutoriel php >Comment utiliser Regex pour éviter de modifier le texte à l'intérieur des balises HTML lors du remplacement ?

Comment utiliser Regex pour éviter de modifier le texte à l'intérieur des balises HTML lors du remplacement ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-01 22:54:11627parcourir

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

Regex pour faire correspondre en dehors des balises HTML pour le balisage sélectif

Pour empêcher les correspondances dans les balises HTML lors de l'utilisation de preg_replace pour ajouter des balises à des mots spécifiques dans une page HTML, il est crucial de définir une expression régulière qui exclut ces zones.

Original Modèle :

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

Faiblesse :

Le modèle ci-dessus correspondra également aux instances des mots cibles dans les balises HTML, ce qui n'est pas souhaitable.

Amélioré Modèle :

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

Répartition :

  • (asf|foo|barr) : Correspond aux mots cibles.
  • (?=): Assertion d'anticipation qui garantit que la correspondance se produit avant la balise HTML de fermeture (
  • 1* : Correspond à zéro ou plusieurs caractères (à l'exclusion de la balise HTML de fermeture

Comment ça Fonctionne :

Ce modèle correspond aux mots cibles uniquement s'ils ne sont pas immédiatement suivis du crochet angulaire HTML fermant. Il restreint efficacement la correspondance à l'extérieur des balises HTML, empêchant ainsi les modifications involontaires à l'intérieur de celles-ci.

Exemple :

Considérez le HTML suivant :

<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>

En utilisant le modèle amélioré, le mot cible "yasar" sera mis en correspondance et étiqueté, tandis que l'instance dans l'attribut "alt" de la balise d'ancrage sera laissée intact :

<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. >

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn