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

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

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

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

【问题讨论】:

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

标签: php regex url url-parameters


【解决方案1】:

试试这个功能:

/https?:\/{2}(?:w{3}\.)?[-.\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+)(?:[#&]|$)/
    

    英文也一样:

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

    【讨论】:

      【解决方案5】:

      试试这个正则表达式:

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

      【讨论】:

        猜你喜欢
        • 2017-05-14
        • 2018-11-28
        • 2011-08-06
        • 2012-02-21
        • 2016-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多