正規表現の一部が、特定の終了タグ自体に含まれていない場合は、キーワードの周りに<strong>
というタグを追加します。正規表現の終了タグの置き換えの問題
A test line
へ:
A <strong>test</strong> line
が、これは変更されません。
これは、常にキーワードはtest
た場合
foreach ($keywords as $keyword) {
$str = preg_replace("/(?!(?:[^<]+>|[^>]+(<\/strong>|<\/a>|<\/b>|<\/i>|<\/u>|<\/em>)))\b(" . preg_quote($keyword, "/") . ")\b/is", "<strong>\\2</strong>", $str, 1);
}
だから、これは変化するであろう...うまく働いています
<a href="">A test line</a>
可能な限り無視したい終了タグのリストが正規表現内にあることを確認してください。
私たちがどのように見える文字列を使用して問題が発生している:
<a href="">A test <em>line</em></a>
それは
<a href="">A <strong>test</strong> <em>line</em></a>
...として出て来るので、それは、そのことについては決算</a>
または</em>
を認識していないが私たちはそれがしたくない。誰もがこれに修正があるかどうかを知ることができます(そして、はい、私は正規表現のルールでHTMLを解析しないので、その悪名高い投稿へのリンクを投稿することは答えではありません;-))
申し訳ありませんが、あなたがそれを認識している場合、なぜあなたはまだRegexでHTMLを解析していますか? ;-) –
正規表現ルールでHTMLを解析しないことに気付いているので、私は悪名高い投稿へのリンクをとにかく投稿します:http://stackoverflow.com/questions/1732348/regex-match ($ {str = preg_replace( '/(?<!<(a | b | i | u | em | strong)。*?>。*?})\ -open-tags-except-xhtml-self-contained-tags –