C#正则表达式问题:如何匹配首尾为1且中间含至少一个0的所有模式?
解决重叠的1开头结尾且中间含0的正则匹配问题
你遇到的问题是因为普通正则匹配会消耗已匹配的字符,导致重叠的匹配项被跳过。比如输入“101001000”,1(0)+1匹配完“101”后,匹配指针会跳到位置3,直接跳过了位置2的“1”,自然找不到后面的“1001”。
用正向先行断言就能解决这个问题,它属于零宽度断言,只检查后续字符是否符合规则,不会消耗任何字符,这样正则引擎可以逐个位置扫描所有可能的匹配。
正确的正则模式
string pattern = @"(?=(1(0+)1))";
代码示例
string input = "101001000"; foreach (Match match in Regex.Matches(input, pattern)) { // 通过Groups[1]提取完整的匹配内容 Console.WriteLine(match.Groups[1].Value); }
运行后会输出:
101 1001
正则原理说明
(?=...):正向先行断言,仅验证当前位置后方的字符是否符合括号内的模式,不移动匹配指针,也不消耗字符。1(0+)1:这是你原本要匹配的核心规则——以1开头、结尾,中间至少一个0,被包裹在先行断言中,通过捕获组Groups[1]来获取完整的匹配结果。
这样就能遍历到所有重叠的符合条件的字符串了。
内容的提问来源于stack exchange,提问作者Miha
相关产品推荐
相关产品推荐

