更新/注意事项:
(仔细读:)
我有一个包含可变数量的段(简化)的字符串:
$subject = 'AA BB DD '; // could be 'AA BB DD CC EE ' as well
Run Code Online (Sandbox Code Playgroud)
我想现在匹配段并通过匹配数组返回它们:
$pattern = '/^(([a-z]+) )+$/i';
$result = preg_match_all($pattern, $subject, $matches);
Run Code Online (Sandbox Code Playgroud)
这只会返回捕获组2 的最后一个匹配:DD.
有没有办法,我可以检索所有的子模式捕获(的方式AA,BB,DD)与一个正则表达式执行?不preg_match_all适合这个吗?
无论是$subject和$pattern简化.自然地与这样的通用列表AA,BB..是更容易与其它功能(例如,以提取explode),或与的的变化$pattern.
但我特别询问如何使用preg_...-family函数返回所有子组匹配.
对于现实生活中的情况,假设您有多个(嵌套)级别的子模式匹配变量.
这是用于描述一些背景的伪代码的示例.想象一下:
令牌的常规定义:
CHARS := [a-z]+
PUNCT := …Run Code Online (Sandbox Code Playgroud) 我在JavaScript中有以下正则表达式,它匹配"12:23:34:45"和"12:23"之类的字符串
/^([0-9]{1,2}\:){0,3}([0-9]{0,2})?$/
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我查看匹配数据时,只返回3个匹配项.例如,对于12:23:34:45,返回的比赛是:
12:23:34:45
34:
45
Run Code Online (Sandbox Code Playgroud)
即第一个捕获组仅报告其最后一个值.我希望比赛是:
12:23:34:45
12:
23:
34:
45
Run Code Online (Sandbox Code Playgroud)
这可能吗?