【发布时间】:2021-08-21 07:02:44
【问题描述】:
我有一个仅由0和1组成的字符串,我需要找到一个以1开头,并以1s的另一个级联结尾的子字符串,每个匹配@987654327 @连续的1加一。
例如,0101101011101 会捕获 1011010111。
我试过了
(?:(1(?(1)\1)).*?)+
| input | groups | output |
|---|---|---|
01 |
0[(1)] |
1 |
1001111 |
[(1)00(11)]11 |
10011 |
010011111 |
0[(1)00(11)(111)] |
10011111 |
0100111110001110 |
0[(1)00(11)(111)]0001110 |
10011111 |
0100111011001110 |
0[(1)00(11)101100(111)]0 |
10011101100111 |
0100111110011110 |
0[(1)00(11)(111)00(1111)]0 |
10011111001111 |
【问题讨论】:
-
我认为你不能把它写成正则表达式。但是,它应该只是对整个字符串进行线性扫描以找到所有这些组。您希望尽快匹配以留下尽可能多的潜在候选人,因此可能应该只是找到 1 并逐组计数。
-
你需要只使用正则表达式吗?
-
@TimBiegeleisen 最好是正则表达式,但不是必须的。我正在使用 PHP7.3 顺便说一句