正则表达式用于包含在1之间的任何非空连续序列0

时间:2017-06-16 22:15:10

标签: java regex

我需要找到一个字符串中的所有组,其中连续的序列0被包含在1

之间
100001abc101 // 2 groups `100001` and `101`
1001ab010abc01001 // 2 groups `1001' and `1001`
1001010001 // 3 groups `1001`, `101` and `10001` --> This is a special case

我的Regex同样是:1(0+)1这适用于第1和第2个案例但在第3个案例中它只匹配1001和{{1} } 10001

请建议我缺少的东西。

问题是匹配从最后一个匹配组的下一个字符开始,它应该从相同的匹配字符本身开始。

3 个答案:

答案 0 :(得分:2)

尝试后视和前瞻,因为你实际上并不想匹配1:

/(?<=1)0+(?=1)/

https://regex101.com/r/IGygJj/3

答案 1 :(得分:2)

要匹配重叠匹配,您应该在前瞻中使用捕获组,如下所示:

(?=(10+1))

RegEx Demo

由于我们只是断言匹配而不是匹配它们,因此正则表达式引擎能够返回10+1的所有可能组合,即使它们是重叠的。

答案 2 :(得分:1)

使用类似(?=(10+1))10+的内容 其中组1包含序列,而
不匹配最后一个。

https://regex101.com/r/uH5OrS/1

一般情况下,您希望使用上一个10+移动该位置 在这种情况下,没有必要,但我不会养成习惯 不包括它,它有一天会咬你。