Preg_replace匹配单词边界而不是链接

时间:2013-11-11 14:29:31

标签: php regex preg-replace

我正在尝试编写一个正则表达式来匹配boundery上的单词,因为文本是html我需要避免<a>here more words</a>中的单词。

我现在的正则表达式是:/\bword\b/u

示例文字:

<p>Example lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur <a href="">porta lorem nec</a> tortor laoreet gravida.</p>

搜索单词lorem只能在开头而不是<a>中替换。

2 个答案:

答案 0 :(得分:6)

你可以使用一些黑暗力量,如下所示:

<a[^>]*>.*?</a\s*>(*SKIP)(*FAIL)|\blorem\b

让我们分解一下:

<a[^>]*>            # match an opening "a" tag
.*?                 # match anything ungreedy until ...
</a\s*>             # match a closing "a" tag
(*SKIP)(*FAIL)      # skip it
|                   # or
\blorem\b           # match lorem with boundaries

基本上我们首先跳过所有a代码,然后匹配lorem

See a working demo

答案 1 :(得分:1)

你的正则表达式中的

/u可能不合适或不需要。它通常用PHP表示unicode,但例如在JavaScript中不允许 或者可能是您在PHP中使用preg_match而不是preg_match_all