HTML ドキュメントで preg_replace を使用してテキスト置換を実行する場合、HTML タグを不用意に変更しないことが重要です。たとえば、特定の単語を 内で囲むタスクを考えてみましょう。タグ:
<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>
次の正規表現は、「yasar」を に置き換えようとします。タグ:
preg_replace("/(asf|gfd|oyws)/", '<span>
残念ながら、この正規表現はアンカー タグの alt 属性内の「yasar」にも一致するため、望ましくない変更が生じます。
このような不要な一致を防ぐために、アサーションを利用できます。検索対象の単語 (つまり、「asf」、「gfd」、または「oyws」) が「<」の前に出現しないと主張することにより、または、「>」の後に、HTML タグ内の一致を効果的に除外できます。このアプローチを採用した修正された正規表現は次のとおりです。
/(asf|foo|barr)(?=[^>]*(<|$))/
先読みアサーション (?=[^>]*(<|$)) により、単語の後に HTML タグ オープナーが必ず続くようになります。 ("<") または文字列の末尾 ("$" で表されます)。これにより、タグ内の一致が効果的に除外されます。
このアサーションを正規表現に組み込むことで、HTML タグを変更せずに置換を実行でき、alt 属性の yasar が変更されないことが保証されます。
<a href="example.com" alt="yasar home page">yasar</a>
以上がPHP Regex を使用して、テキスト置換中に HTML タグの変更を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。