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

标签 c# regex

我有正则表达式 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示例:您没有添加全局标志,这会阻止多个选择。

关于c# - 在 C# 中获取重叠的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989025/

相关文章:

c# - 在c#中的线程中运行带参数的方法

c# - 正则表达式替换可变长度字符串中的所有字符

python正则,编译和匹配

regex - 通过混合使用语法和正则表达式模式搜索字符串

c# - 带有单元测试的示例项目

c# - 此代码如何处理 INotifyPropertyChanged

c# - WPF - namespace 中不存在名称

JavaScript:从表配置字符串中提取列标题

javascript - 使用正则表达式匹配背景图片 URL

regex - 使用删除