如何更改此正则表达式以匹配不在锚点内的所有关键字

时间:2013-03-07 14:16:47

标签: php regex

我正在尝试使用锚点替换某些文本中的关键字,该锚点会打开所述关键字的详细信息窗口。这是我用于替换的代码:

$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”。该异常适用于所有情况,除非我正在寻找的单词不是锚中的第一个单词。因此,例如,它不会替换<a>deviz detalii</a><a>deviz</a>中的“deviz”,而是将其替换为<a>detalii deviz</a>

我应该如何更改模式以使正则表达式避免匹配锚内的任何单词,就像我想要的那样。

1 个答案:

答案 0 :(得分: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'

你的正则表达式似乎运行良好 - 问题是什么?

相关问题