相关疑难解决方法(0)

如何使用preg_match_all()获取子组匹配的所有捕获?

更新/注意事项:

我认为我可能正在寻找的是用PHP 获取组捕获.

引用:使用命名模式子例程的PCRE正则表达式.

(仔细读:)


我有一个包含可变数量的段(简化)的字符串:

$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)

php regex grammar preg-match-all

19
推荐指数
1
解决办法
1万
查看次数

你能在JavaScript中检索多个正则表达式匹配吗?

我在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)

这可能吗?

javascript regex

8
推荐指数
1
解决办法
1382
查看次数

标签 统计

regex ×2

grammar ×1

javascript ×1

php ×1

preg-match-all ×1