使用测试字符串:
This is a string1 string2 string3 string4 string5 string6 string7 so it is.
是否可以将所有stringX作为反向引用?目前我尝试过的每次都会覆盖,所以我最终得到一场比赛 - 最后一场比赛。
例如使用这样的正则表达式:
/This is a (?:(string\d) )+so it is./
最终会以string7
的匹配结束。
到目前为止,我发现的最好的方法是移除上面的?:
并在空格上爆炸,但我感兴趣的是,是否有纯粹的方法可以做到这一点正则表达式。
更新专门针对PHP,实现这一目标的最佳方式是什么?
答案 0 :(得分:0)
您可以使用\G
(?:This is a|\G(?!\A))\h+((?=.*so it is\.)string\d+)
\G
在上一场比赛结束时或第一场比赛的字符串开头处断言位置(?!\A)
是负面预测断言我们在第一行开头不匹配\G
(?=.*so it is\.)
是肯定的先声,断言我们在输入中的当前位置前so it is.
<强>代码:强>
$re = '/(?:This is a|\G(?!\A))\h+((?=.*so it is\.)string\d+)/m';
$str = 'This is a string1 string2 string3 string4 string5 string6 string7 so it is.';
preg_match_all($re, $str, $matches);
// Print the entire match result
print_r($matches[1]);