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

问题描述 投票:0回答:1

我正在学习具有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

我得到的错误是:

。 * 后向查找必须是零宽度,因此量词不是 允许

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

java regex
1个回答
1
投票

您可以使用此正则表达式,而不使用可变长度后向查找,但仍然使用负向前向获得相同的功能:

^(?!.*\byellow\b).*\bblue\b.*\bbrown\b.*$

在线正则表达式演示

正则表达式详细信息:

  • ^
    :开始
  • (?!.*\byellow\b)
    :如果右侧任意位置存在完整单词
    yellow
    ,则否定前瞻会使匹配失败
  • .*\bblue\b
    :匹配 0 个或多个任意字符,后跟完整单词 
    blue
    
    
  • .*\bbrown\b
    :匹配 0 个或多个任意字符,后跟完整单词 
    brown
    
    
  • .*$
    :匹配结束前的剩余文本
© www.soinside.com 2019 - 2024. All rights reserved.