php - 如何preg_match所有数字而不是url编码的逗号

标签 php arrays regex preg-match

我使用以下 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+位

Regex demo | PHP demo

例子

$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/

相关文章:

php - 组合两个表不同的标准

arrays - Hyperledger 结构 Node 错误 : 2 UNKNOWN: Stream removed Unhandled error for request GET/api/fabric/1_0/channels:

java - 当我添加新人员时,为什么我的目录程序中的添加方法将文本文件中的前四个字段设置为空?

javascript - jQuery 不会触发

php - ID 多的总值(value)总和

php - 列出数据库中的详细信息

javascript - 如果下拉列表中没有选定值,则禁用按钮

python - 通过 int 选择 numpy 数组轴

python - float() 参数必须是字符串或数字,而不是 '_sre.SRE_Match'

regex - 如何在 Julia 中编写包含加号的正则表达式?