PCRE中的负向前瞻和负后观以及多个角色

时间:2014-07-09 12:03:24

标签: php regex pcre

我有以下文字:

aabbaa
aa bbc aa

bbg

aa           bbd   aa

我想找到starts with bb not between aa and aa的单词bbg,而不管使用PCRE匹配单词之前或之后的空格。在上面的示例中,只应匹配(?<!aa)bb(\w)*(?!aa)

我创建了以下模式:

\s*

然而,只有aabbaa不匹配,其他没有。我不知道如何在前方/后方使用(?<!aa\s*)bb(\w)*(?!\s*aa) 来获得所需的结果。似乎使用以下方法不能简单地完成:

{{1}}

怎么做?

1 个答案:

答案 0 :(得分:3)

(*跳过)(* F)魔术(无需前瞻)

使用此:

(\baa\b).*?\1(*SKIP)(*F)|\bbb\w+\b

查看the demo中的匹配项。

此问题是此问题中向"regex-match a pattern, excluding..."

解释的技术的典型案例

交替|的左侧匹配完整的aa ... aa字符串然后故意失败,之后引擎跳转到字符串中的下一个位置。右侧与您想要的bb...字匹配,我们知道它们是正确的,因为它们与左侧的表达不匹配。

参考