Skip to main content
 首页 » 编程设计

c#之在 C# 中获取重叠的正则表达式匹配

2024年01月31日28zhujiabin

我有正则表达式 1(0*)1 和测试字符串 1000010001

我想要 2 个匹配项,但我发现只找到了 1 个:

var regex = new Regex("1(0*)1"); 
var values = regex.Matches(intBinaryString); 
// values only has 1 match 

regexonline 似乎同意:https://regex101.com/r/3J9Qxj/1

我做错了什么?

请您参考如下方法:

您已经在第一个匹配项中选择了第二个零前面的 1。

100001 0001 
^^^^^^ 

这是第一场比赛。其余的只是 0001,它与您的正则表达式不匹配。


如果您使用前瞻/后视,您可以规避此行为:

(?<=1)(0*)(?=1) 

Live example


因为你不能在 JavaScript 中使用 lookbehinds,所以只使用一个 lookahead 就足够了,以防止重叠:

1(0*)(?=1) 

Live example


还有一个给你的提示 regex101示例:您没有添加全局标志,这会阻止多个选择。