我需要匹配一组精确的5个字符1。在下面的示例
02011111020 // match
00211111200 // Not match because there are 2 at start and end of group
00111111100 // Not match because there are 6 1's
到目前为止,我已经尝试了模式
(?!2)(1{5}?)(?!2)
但00111111100
失败D(1{5}?)D
,但02011111020
失效
这个条件(?!2)
总是为真,因为下一个匹配的字符是1,这个条件(?!2)
断言不是2,如果右边还有一个1,它将为真。
此D
表示匹配数字以外的字符,该字符在只有数字的字符串中永远无法匹配。
您可以使用字符类[12]
和遍寻来排除匹配1和2:
(?<![12])1{5}(?![12])
模式匹配:
(?<![12])
负向后看,断言左边不是1或21{5}
匹配5次1(?![12])
负向前看,断言不是1或2向右
Regex演示
接受的答案很好地使用了遍历。使用相同的技术,下面给出的是一个更简单的解决方案:
(?<=0)1{5}(?=0)
模式匹配:
(?<=0)
正向后看,左置01{5}
匹配5次1(?=0)
正向前看,断言0到右边
Regex演示
匹配连续5个1
的行,0
前后依次为:
.*01{5}0.*