给出以下字符串:
FFSMQWUNUPZRJMTHACFELGHDZEJWFDWVPYOZEVEJKQWHQAHOCIYWGVLPSHFESCGEUCJGYLGDWPIWIDWZZXRUFXERABQJOXZALQOCSAYBRHXQQGUDADYSORTYZQPWGMBLNAQOFODSNXSZFURUNPMZGHTA
我正在尝试将包含CABDA
的每个子字符串与以下正则表达式匹配:
C.*?A.*?B.*?D.*?A
我唯一能找到的是
CFELGHDZEJWFDWVPYOZEVEJKQWHQAHOCIYWGVLPSHFESCGEUCJGYLGDWPIWIDWZZXRUFXERABQJOXZALQOCSAYBRHXQQGUDA
这本身并没有错 - 但我应该找到CSAYBRHXQQGUDA
我错过了什么?
如果您愿意,可以对其进行测试here
感谢任何帮助。
答案 0 :(得分:2)
惰性量词并不意味着它会尝试匹配可能的最小子串。它只是意味着它会尽可能地匹配尽可能少的角色并向更多角色回溯,而不是匹配尽可能多的角色并向更低的方向回溯。
找到位置保持不变 - 第一个从左到右。例如:
x+?y
匹配时:
xxxy
仍然会与xxxy
匹配,而不仅仅是xy
,因为它可以从第一个x
开始,然后回溯到更多x
个。
答案 1 :(得分:1)
答案 2 :(得分:0)
(?=(C.*?A.*?B.*?D.*?A))
将您的表达式放在lookahead
中以获取所有匹配。请参阅演示
https://regex101.com/r/fM9lY3/46
如果您只想找到最短的,可以使用
C(?:(?!C|A|B|D).)*A(?:(?!C|A|B|D).)*B(?:(?!C|A|B|D).)*D(?:(?!C|A|B|D).)*A