正则表达式前瞻量词

3
我想匹配字符串ababaaabaab中前面有aab最后一个出现的位置。
我的正则表达式:(?<=a{2})b 但是它匹配的是前面有aaa的第三个b
我是一个初学者。

你说“紧随aa的b”,但是你尝试使用一个正则表达式来匹配“紧随b的aa”。这到底是哪个?第三个b是被aaa前置的,而不是后面跟着。 - Chris Maurer
1
另外,您使用的是什么工具/正则表达式引擎?如果它恰好允许可变长度回溯,请在a之前放置贪婪的^.*,并让它消耗一切直到最后一个aab。 - Chris Maurer
请查看 https://regex101.com/r/udMGF7/1,下面的解决方案将适用于您。您已经检查过了吗? - Wiktor Stribiżew
@WiktorStribiżew,我不理解正则表达式中的(?<=(?<!a)部分。虽然Ryszard先生解释了它,但我仍然不明白为什么需要这个。您能否简要地向我解释一下? - Sanzida
1
@Sanzida (?<=a{2}) 匹配的是紧接着两个 a 的位置,但它并不检查在这两个 a 之前是否还有其他的 a。额外的 (?<!a) 是必需的,以确保当前位置之前只有 2 个 a - Wiktor Stribiżew
显示剩余2条评论
1个回答

2

使用

(?<=(?<!a)a{2})b

请参见证明说明
--------------------------------------------------------------------------------
  (?<=                     look behind to see if there is:
--------------------------------------------------------------------------------
    (?<!                     look behind to see if there is not:
--------------------------------------------------------------------------------
      a                        'a'
--------------------------------------------------------------------------------
    )                        end of look-behind
--------------------------------------------------------------------------------
    a{2}                     'a' (2 times)
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  b                        'b'

2
这确实与 OP 尝试的最后一个 b 匹配。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接