如何在lookbehind正则表达式中使用quatifiers(*或+)?

时间:2014-07-01 21:06:21

标签: java regex

我正在使用环视(lookbehind和lookahead)功能学习正则表达式,但我不能在lookbehind中使用.*.+量词(但我可以预见)。

我试图解决的正则表达式如下:

(?<!yellow.*)blue(?=.*brown)

我们的想法是匹配不具有yellow的行,但只有在{蓝色之后{}存在blue时才会brown。以下是一些示例:

yellow blue brown                    // shouldn't match
f blue brown                         // should match
sdff blue brown                      // should match
asdf  f blue c                       // shouldn't match
yellow blue fblue b f brown          // shouldn't match

这是我的测试:

http://regex101.com/r/fY4kI9/5

我得到的错误是:

  

。 * Lookbehinds需要为零宽度,因此量词不是   允许

你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式而不使用可变长度的lookbehind但仍然可以获得相同的功能:

.*yellow.*(*SKIP)(*F)|^.*\bblue\b(?=.*brown).*$

Working Demo