Regex Lazy模式不会'没有按预期工作
Regex Lazy mode doesn't work as expected
给定以下字符串:
FFSMQWUNUPZRJMTHACFELGHDZEJWFDWVPYOZEVEJKQWHQAHOCIYWGVLPSHFESCGEUCJGYLGDWPIWIDWZZXRUFXERABQJOXZALQOCSAYBRHXQQGUDADYSORTYZQPWGMBLNAQOFODSNXSZFURUNPMZGHTA
我正在尝试将包含CABDA
的每个子字符串与以下正则表达式进行匹配:
C.*?A.*?B.*?D.*?A
我唯一能找到的就是
CFELGHDZEJWFDWVPYOZEVEJKQWHQAHOCIYWGVLPSHFESCGEUCJGYLGDWPIWIDWZZXRUFXERABQJOXZALQOCSAYBRHXQQGUDA
这本身并没有错,但我应该找到CSAYBRHXQQGUDA
我错过了什么?
如果您想要,可以在此处测试
感谢您的帮助。
惰性量词并不意味着它会尝试匹配尽可能小的子字符串。这只是意味着它将尝试匹配尽可能少的字符,并向更多的字符回溯,而不是匹配尽可能多的字符,然后向更少的字符回溯。
查找位置保持不变-从左到右的第一个位置。例如:
x+?y
匹配时:
xxxy
将仍然匹配xxxy
,而不仅仅是xy
,因为它能够从第一个x
开始并向更多的x
回溯。
您可以使用这个基于否定类的正则表达式:
/C[^C]*?A[^A]*?B[^B]*?D[^D]*?A/
RegEx演示
这会在给定的输入中找到CSAYBRHXQQGUDA
。
(?=(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
相关文章:
- 数据属性仅在切换设备模式下工作
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- 更改不在引导模式窗口中工作的月份和年份
- 推特Boostrap模式窗口-可拖动不工作
- 如何使引导模式正常工作
- 与未在发布模式下工作的子目录和区域绑定
- 为什么除了html5输入模式属性之外,这个简单的regex在任何地方都能工作
- 为什么我的UI应用程序嵌套在引导模式中时无法工作
- 代码在调试模式下工作
- 选中的单选按钮在jQuery模式对话框中不能正常工作
- bootstrap日期选择器轨道无法通过带有bootstrap模式的simple_form工作
- 我的滑块无法在自动模式下工作
- 事件发射器模式如何在Node,sockets.io中工作
- js不能在bs3ajax模式中工作
- 如何使Asp.net网站同时在IE 11(非可比模式)和IE 8中工作
- Eonasdan日期时间选择器没有'不能在联机模式下工作
- jQuery每5个工作小时重置一次颜色模式
- AJAX 在调试模式下工作,但不是实时的
- 代码仅在调试器模式下工作,断点位于 Consol.log否则不起作用
- config.fullPage = true;在 ckEditor 内联模式下无法正常工作.如何实现这一点