PHP で正規表現を使用した HTML アンカー タグ外のキーワードの一致
HTML コンテンツの処理中に遭遇する一般的な課題は、特定の操作を実行する必要があることです。テキスト内の特定のキーワードについて。ただし、多くの場合、アンカー () タグなど、特定の HTML 要素内に出現するキーワードのインスタンスを除外する必要があります。
この状況は、出現したキーワードをリンクに置き換えたい場合に発生します。ただし、キーワードが指定されたターゲット URL のアンカー タグ内にまだ囲まれていない場合に限ります。これを実現するには、アンカー タグ内の特定のパターンを除外しながら、キーワードに一致するように PHP 正規表現を構築する必要があります。
解決策は、否定先読みアサーションを使用してこの除外を強制することです。次の正規表現は、アンカー タグ内に出現しないキーワードのみを効果的に一致させ、置換します。
<code class="php">$str = preg_replace('~Moses(?!(?>[^<]*(?:<(?!/?a\b)[^<]*)*)</a>)~i', '<a href="dictionary.php?k=keyword"></a>', $str);</code>
(?>...) で囲まれた否定先読みアサーションにより、キーワードが開始アンカー タグが前になく、その後に終了アンカー タグが続きません。否定先読みは、文字を消費せずに文字列の残りの部分を評価し、主要な一致ルールが先読み後に続行できるようにします。
この特定のケースでは、否定先読みは、Moses の直後にシーケンスが続かないことをアサートします。
以外の任意の数のアンカータグ文字
終了アンカー タグ
このシーケンスが Moses キーワードの前に存在しない場合、先読みは成功し、キーワードがアンカー タグ内にないことを示します。これにより、メインの一致ルールでキーワードを目的のリンク形式に置き換えることができます。意図しない置換を回避するには、さまざまな入力シナリオに対して正規表現を徹底的にテストし、一貫性のある正確な結果を保証することが重要です。以上がPHP で HTML アンカー タグの外側にあるキーワードを一致させるために正規表現を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。