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 回答