我正在学习具有lookaround(lookbehind和lookahead)功能的正则表达式,但我不能在lookbehind中使用
.*
或.+
量词(但我可以使用lookahead)。
我试图修复的正则表达式如下:
(?<!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
我得到的错误是:
。 * 后向查找必须是零宽度,因此量词不是 允许
你知道我该如何解决这个问题吗?
您可以使用此正则表达式,而不使用可变长度后向查找,但仍然使用负向前向获得相同的功能:
^(?!.*\byellow\b).*\bblue\b.*\bbrown\b.*$
正则表达式详细信息:
^
:开始(?!.*\byellow\b)
:如果右侧任意位置存在完整单词yellow
,则否定前瞻会使匹配失败
.*\bblue\b
:匹配 0 个或多个任意字符,后跟完整单词
blue
.*\bbrown\b
:匹配 0 个或多个任意字符,后跟完整单词
brown
.*$
:匹配结束前的剩余文本