首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取所有匹配组PREG PHP风味

获取所有匹配组PREG PHP风味
EN

Stack Overflow用户
提问于 2016-01-27 13:40:39
回答 1查看 46关注 0票数 2

模式:'/x(?: (\d))+/i'

字符串:x 1 2 3 4 5

返回:1 Match Position[11-13] '5'

我想要捕捉所有可能的重复,还是它每组返回一个结果?

我想要以下几点:

期望产出:

代码语言:javascript
运行
复制
MATCH 1
1.  [4-5]   `1`
2.  [6-7]   `2`
3.  [8-9]   `3`
4.  [10-11] `4`
5.  [12-13] `5`

我可以通过复制粘贴组来实现这一点,但这不是我想要的。我想要一个动态组捕获

模式:x(?: (\d))(?: (\d))(?: (\d))(?: (\d))(?: (\d))

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 13:43:48

您不能使用一个组捕获多个文本,然后使用PCRE访问它们。相反,您可以使用\d+(?:\s+\d+)*匹配整个子字符串,然后用空格拆分:

代码语言:javascript
运行
复制
$re2 = '~\d+(?:\s+\d+)*~';
if (preg_match($re2, $str, $match2)) {
    print_r(preg_split("/\\s+/", $match2[0]));
}

或者,使用基于\G的正则表达式返回多个匹配项。

代码语言:javascript
运行
复制
(?:x|(?!^)\G)\s*\K\d+

请参阅演示

这是一个PHP演示

代码语言:javascript
运行
复制
$str = "x 1 2 3 4 5"; 
$re1 = '~(?:x|(?!^)\G)\s*\K\d+~'; 
preg_match_all($re1, $str, $matches);
var_dump($matches);

在这里,(?:x|(?!^)\G)充当一个前导边界(只有在x或每个成功匹配之后才匹配空白空间和数字)。遇到数字时,使用\K运算符省略到目前为止匹配的所有字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35038958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档