preg_match_all如何获得*所有*组合?即使是重叠的

Jag*_*agu 4 php regex

PHP正则表达式函数中是否有一种方法可以获得正则表达式的所有可能匹配, 即使这些匹配重叠

例如,获取所有3位数的子字符串'/ [\ d] {3} /'...

你可能会得到:

"123456"=> ['123','234','345','456']

但是preg_match_all()只返回

['123','456']

这是因为它在匹配的子字符串之后再次开始搜索(如文档中所述):

"在找到第一场比赛后,随后的搜索将在最后一场比赛结束时继续进行."

没有编写自定义解析器,有没有办法解决这个问题?

Ja͢*_*͢ck 7

对救援的前瞻性断言!

preg_match_all('/(?=(\d{3}))/', $str, $matches);
print_r($matches[1]);
Run Code Online (Sandbox Code Playgroud)

它基本上捕获了前瞻断言匹配的内容.由于断言为零宽度,$matches[0]因此只包含空字符串,但$matches[1]将包含预期的捕获模式.