正则表达式获取数字 URL 参数的值?

Posted

技术标签:

【中文标题】正则表达式获取数字 URL 参数的值?【英文标题】:Regex to get value of a numeric URL parameter? 【发布时间】:2011-02-25 19:09:59 【问题描述】:

在像下面这样的 url 中,我想获取 ProdId 的值。 URL 格式将始终保持一致,参数名称也将始终保持一致,但值的长度可能会发生变化。它始终是数字。

http://www.example.com/page.php?ProdId=2683322&xpage=2

使用 PHP 获得它的最快方法是什么(我将处理 10,000 个,所以速度是个问题)?

【问题讨论】:

您是否有严格控制的输入数据,或者是否有人会向您提供格式错误的数据? 应该总是一样的,但我假设在某个时候会出现格式错误的东西。 【参考方案1】:

试试这个功能:

/https?:\/2(?:w3\.)?[-.\w][^\.]+\.2,\/ProdId=\d+\&xpage=\d+/

【讨论】:

【参考方案2】:

你不能用$_GET['ProdId']吗?

【讨论】:

好吧,如果他正在分析他当前所在页面的 URL,是的,但如果他要“处理 10,000 个”,他可能不会这样做 完全正确:想象一个包含 10,000 个 URL 的数据库表通过我的脚本,我不能为此使用 $_GET。【参考方案3】:

PHP 对此有内置函数。将parse_url()parse_str() 一起使用。

来自php.net的拼凑:

$url = 'http://www.example.com/page.php?ProdId=2683322&xpage=2';

// Parse the url into an array
$url_parts = parse_url($url);

// Parse the query portion of the url into an assoc. array
parse_str($url_parts['query'], $path_parts);

echo $path_parts['ProdId']; // 2683322
echo $path_parts['xpage']; // 2

【讨论】:

哇,太棒了——我从来不知道那些存在 太棒了,我也不知道这些存在。花了很长时间试图找出正确的正则表达式,我是一个我知道的菜鸟......但我切换到这些并在不到一分钟的时间内完成!【参考方案4】:
/^[^#?]*\?(?:[^#]*&)?ProdId=(\d+)(?:[#&]|$)/

英文也一样:

    匹配除?# 之外的任何内容(这将使我们到达查询字符串或哈希部分的开头,以先到者为准) 匹配?(如果只有哈希部分,这将取消匹配) 可选择匹配任何内容(但不匹配#,以防有哈希部分)后跟& 匹配您的键值对,将值放入捕获子模式中 匹配下一个参数的 &、# 或字符串的结尾。

【讨论】:

【参考方案5】:

试试这个正则表达式:

^http://www\.example\.com/page\.php\?ProdId=(\d+)

【讨论】:

以上是关于正则表达式获取数字 URL 参数的值?的主要内容,如果未能解决你的问题,请参考以下文章

Qt笔记-使用正则表达式匹配URL及获取Get请求后面的参数(QRegExp)

如何使用正则表达式查询 pymongo 以获取仅包含数字的值

获取URL地址栏参数(正则表达式)

java怎样获取url参数

获取 Django url 正则表达式中的多个参数

javascript 如何使用Javascript正则表达式获取URL参数