Lorsque vous effectuez des remplacements de texte à l'aide de preg_replace dans des documents HTML, il est essentiel d'éviter de modifier les balises HTML par inadvertance. Par exemple, considérons la tâche consistant à envelopper certains mots dans 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>
L'expression régulière suivante tente de remplacer "yasar" par tags :
preg_replace("/(asf|gfd|oyws)/", '<span>
Malheureusement, cette expression régulière correspond également à "yasar" dans l'attribut alt d'une balise d'ancrage, ce qui entraîne des modifications indésirables.
Pour éviter de telles correspondances indésirables, une assertion peut être utilisée. En affirmant que le mot recherché (c'est-à-dire "asf", "gfd" ou "oyws") n'apparaît pas avant un "<" ou après un ">", nous pouvons effectivement exclure les correspondances dans les balises HTML. Voici une expression régulière modifiée qui utilise cette approche :
/(asf|foo|barr)(?=[^>]*(<|$))/
L'assertion d'anticipation (?=[^>]*(<|$)) garantit que le mot doit être suivi soit d'un ouvre-balise HTML ("<") ou la fin de la chaîne (représentée par "$"). Cela exclut effectivement les correspondances dans les balises.
En incorporant cette assertion dans l'expression régulière, nous pouvons effectuer des remplacements sans modifier les balises HTML, garantissant ainsi que yasar dans l'attribut alt reste intact :
<a href="example.com" alt="yasar home page">yasar</a>
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!