[英]Regex does not return all matches for same start char and multiple endings
在下面的正则表达式中:
1.*(aaa|ccc)
测试字符串
1aaaccc
1组ccc只有一场比赛。 但是应该有两个匹配 aaa 和 ccc
取决于你在寻找什么; 模式 "1.*(aaa|ccc)" 将提取两个组:
"1aaaccc": '1' + 任何字符 + 'ccc'。 'ccc' 被选为默认的 'greedy' 匹配:尽可能多地提取。
“ccc” - 因为“ccc”在“捕获组”中。 您可以抑制这种情况,将模式更改为“1.*(?:aaa|ccc)”。 它是“ccc”而不是“aaa”,因为它代表了已经存在的匹配的一部分。 第一个之后的所有可选匹配都是第一个的片段。
如果您删除“.*”,那么“ccc”将变得无关紧要,您将拥有“1aaa”和“aaa”。 如果要同时获取“aaa”和“ccc”,则模式必须为“1(aaa)(ccc)”。 结果将是:“1aaaccc”、“aaa”、“ccc”。 但这可能不是您需要的:字符串“1xxxccc”不会匹配任何内容。
它适用于 .NET 正则表达式,其他口味很可能会给出相同的结果。 希望我的描述有意义:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.