Web ページ内の単語を検索/置換するための正規表現 (php) を探していました。ただし、すべての html タグ間の単語を置き換えることはできません。斜体の < i >、太字の < b >、およびプレーン テキストの間のみです。
例:
単語: "こんにちは" (大文字と小文字を区別しない)
<a href="#">Hello</a> im a writer that i like to say hello everyday. <b>Hello</b> Spiderman.
置換: アンカーでは置換できず、hello のみ< b>Hello< /b>
で置換できます。
いくつかの正規表現をテストしましたが、適切に機能するものはありません:
1) SMART SEO LINKS (WP プラグイン) から
$reg = '/(?!(?:[^<\[]+[>\]]|[^>\]]+<\/a>))\b($word)\b/Imsu';
うまく動作しない場合があり、コンテンツを削除してシンボル ">" を挿入します。この正規表現にいくつかの変更を加え、"?!" を削除しました。または「?:」(意味がわかりません)が、動作を停止します。
2)私が試した他のもの:
$reg = "/<([\w]+)[^>]*>\b('.$word.')\b<\/\1>/Imsu";
$reg = '/<+\s*\/\s\b('.$word.')\b[^>]\/\s>+/I';
何も置き換えない
$reg = '/<(\w+)[^>]*>\b('.$name.')\b<\/\1>/Imsu';
時々動作します。
真実は、私は正規表現の専門家ではなく、新しい正規表現を作成しようとして数日間テストしていましたが、必要な結果を満たしていませんでした。
実際のところ、replace は WP プラグインで使用され、テンプレートや他のプラグインに影響を与えたり、DOM が適切に作成されていないことがあります。
正しく動作しない理由を知っている人はいますか? ありがとう。