C# 在C中获得重叠的正则表达式匹配#

C# 在C中获得重叠的正则表达式匹配#,c#,regex,C#,Regex,我有正则表达式1(0*)1和测试字符串100001001 我想有2个匹配项,但我发现只有1个匹配项: var regex = new Regex("1(0*)1"); var values = regex.Matches(intBinaryString); // values only has 1 match regexonline似乎同意: 我做错了什么?第一次匹配时,您已经选择了第二个零前面的1 100001 0001 ^^^^^^ 这是第一场比赛。其余的是与正则表达式不匹配的0001

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

我想有2个匹配项,但我发现只有1个匹配项:

var regex = new Regex("1(0*)1");
var values = regex.Matches(intBinaryString);
// values only has 1 match
regexonline似乎同意:


我做错了什么?

第一次匹配时,您已经选择了第二个零前面的1

100001 0001
^^^^^^
这是第一场比赛。其余的是与正则表达式不匹配的
0001


如果使用lookaheads/lookbehinds,则可以避免此行为:

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



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

您需要匹配重叠的字符串

这意味着您应该使用捕获组(
+您的模式+
)包装您的模式,并将此消费模式置于正向前瞻中,然后匹配所有事件并获取组1值:

(?=(YOUR_REGEX_HERE))
使用

var regex=newregex((?=(10*1))”;
var values=regex.Matches(intBinaryString)
.Cast()
.Select(m=>m.Groups[1]。值)
.ToList();

(?=(YOUR_REGEX_HERE))
var regex = new Regex("(?=(10*1))");
var values = regex.Matches(intBinaryString)
    .Cast<Match>()
    .Select(m => m.Groups[1].Value)
    .ToList();