0

テキスト内のキーワードを、そのキーワードの詳細ウィンドウを開くアンカーに置き換えようとしています。これは私が置換に使用するコードです:

$pattern = '%\b('.$keyword['Keyword'].')\b(?![^<]*</a>)%i';
$replacement = '<a href="#detalii_keyword_'.$keyword['CodKeyword'].'" data-toggle="modal"><strong>\\1</strong></a>';
$text = preg_replace($pattern, $replacement, $text);

アンカー内にある単語を回避するように構築されているため、すでに置き換えられている複数単語のキーワードを回避します。したがって、すでに置き換えられている「detalii deviz」では、「deviz」を置き換えません。例外は、探している単語がアンカーの最初の単語でない場合を除いて、すべての場合に機能します。したがって、たとえば、「deviz」を置き換え<a>deviz detalii</a>たり、置き換えたりすることはありません<a>deviz</a>が、置き換えます<a>detalii deviz</a>

パターンを変更して、正規表現がアンカー内の単語と一致しないようにするにはどうすればよいですか。

4

1 に答える 1

0
$text = 'deviz <a>deviz deviz deviz</a> deviz';
$pattern = '%\bdeviz\b(?![^<]*</a>)%i';
$text = preg_replace($pattern, 'replaced', $text);

echo $text;
// 'replaced <a>deviz deviz deviz</a> replaced'

あなたの正規表現は正常に動作しているようです - 何が問題なのですか?

于 2013-03-07T15:48:01.763 に答える