繁体   English   中英

正则表达式不会返回相同起始字符和多个结尾的所有匹配项

[英]Regex does not return all matches for same start char and multiple endings

在下面的正则表达式中:

1.*(aaa|ccc)

测试字符串

1aaaccc

1组ccc只有一场比赛。 但是应该有两个匹配 aaa 和 ccc

取决于你在寻找什么; 模式 "1.*(aaa|ccc)" 将提取两个组:

  1. "1aaaccc": '1' + 任何字符 + 'ccc'。 'ccc' 被选为默认的 'greedy' 匹配:尽可能多地提取。

  2. “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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM