模式:'/x(?: (\d))+/i'
字符串:x 1 2 3 4 5
返回:1 Match Position[11-13] '5'
我想要捕捉所有可能的重复,还是它每组返回一个结果?
我想要以下几点:
期望产出:
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))
发布于 2016-01-27 13:43:48
您不能使用一个组捕获多个文本,然后使用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*\K\d+请参阅演示
这是一个PHP演示
$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运算符省略到目前为止匹配的所有字符。
https://stackoverflow.com/questions/35038958
复制相似问题