看看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#中,如果这很重要的话,
您确实需要环视,但我会使用一个积极的环视断言:
(?=(([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))