我使用以下 URL https://test.example.com/blah/12345%2C80%2C8263473%2C9475834343
在 URL 的 https://test.example.com/blah/
部分之后,有以 %2C
分隔的数字。我想获取 URL 中所有数字的数组。该数字可能从正 1 一直到正无穷大。 URL 中可能有无限数量的数字或根本没有数字(在这种情况下数组为空)。
在这种情况下,我想要一个像这样的数组:
[12345, 80, 8263473, 9475834343]
$url = "https://test.example.com/blah/12345%2C80%2C8263473%2C9475834343";
preg_match('/\b\d+\b/', $url, $matches);
print_r($matches);
但是,我的数组中唯一的元素是 12345
最佳答案
您还可以使用 \G
anchor 来获取这些数字:
(?:https?://\S+?/blah/|\G(?!^))(?:%2C)?\K\d+
解释
(?:
非捕获组https?://\S+?/blah/
匹配协议(protocol),直到第一次出现/blah/
|
或者\G(?!^)
在上一场比赛结束时断言当前位置,而不是在开始处
)
关闭非捕获组(?:%2C)?
可选地匹配%2C
\K\d+
忘记目前匹配的是什么,匹配1+位
例子
$re = '`(?:https?://\S+?/blah/|\G(?!^))(?:%2C)?\K\d+`m';
$str = 'https://test.example.com/blah/12345%2C80%2C8263473%2C9475834343';
preg_match_all($re, $str, $matches);
print_r($matches[0]);
输出
Array
(
[0] => 12345
[1] => 80
[2] => 8263473
[3] => 9475834343
)
关于php - 如何preg_match所有数字而不是url编码的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68858264/