gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:36:54 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com