模式 : '/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
运算符。