获取所有匹配的组 PREG PHP 风格



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

字符串 : x 1 2 3 4 5

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

我想捕获所有可能的重复,还是每组返回 1 个结果?

我想要以下内容:

期望输出:

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

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

$re2 = '~d+(?:s+d+)*~';
if (preg_match($re2, $str, $match2)) {
    print_r(preg_split("/\s+/", $match2[0]));
}

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

(?:x|(?!^)G)s*Kd+

查看演示

下面是一个 PHP 演示:

$str = "x 1 2 3 4 5"; 
$re1 = '~(?:x|(?!^)G)s*Kd+~'; 
preg_match_all($re1, $str, $matches);
var_dump($matches);

在这里,(?:x|(?!^)G)充当前导边界(仅在x或每次成功匹配后匹配空格和数字)。遇到数字时,到目前为止匹配的所有字符都将省略K运算符。

最新更新