看看Regex的背后

本文关键字:背后 Regex 看看 | 更新日期: 2023-09-27 18:20:48

我从Regex开始(总是从网上使用我需要的)

我需要一些给定输入的东西:

Input: AAABBBCCC
Index: 012345678

正则表达式匹配为:

  • AA从0,1
  • 1,2中的AA(即使1中的A已经消耗掉)
  • BB来自3,4
  • 来自4,5的BB(即使来自4的B已经消耗掉)
  • 来自6,7的CC
  • 来自7,8的CC(即使来自7的B已经被消耗)

我现在拥有的正则表达式是(A{2}|B{2}|C{2})。这不是我真正的问题,但我对A、B和C有不同的工作规则。

我认为我应该使用一些look behind运算符,但尝试:((A{2}|B{2}|C{2})$1)(?<=(A{2}|B{2}|C{2}))不起作用。

下面是一个例子。

注意:我的问题在c#中,如果这很重要的话,

看看Regex的背后

您确实需要环视,但我会使用一个积极的环视断言:

(?=(([ABC])'2))

您的匹配结果将显示在每个match对象的match.Groups(1)中。

解释:

(?=       # Look ahead to check that the following matches:
 (        # Match and capture in group number 1:
  (       # Match and capture in group number 2:
   [ABC]  # Any letter A, B or C
  )       # End of capturing group 2
  '2      # Now match that same letter again.
 )        # End of group 1. It now contains AA, BB or CC
)         # End of lookahead assertion

一个更简单的解决方案:

(?=(AA|BB|CC))