正则表达式获取数字 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)