【问题标题】:PHP regex for $_SERVER["QUERY_STRING"]$_SERVER["QUERY_STRING"] 的 PHP 正则表达式
【发布时间】:2017-04-07 10:53:13
【问题描述】:

我在正则表达式中匹配对。 $pairs[1] 将包含= 之前的部分,$pairs[2] 将包含= 之后的部分。

当它到达&startrow 时,它应该开始跳过休息并开始制作另一对。

$query= "link=http://abcd.com&efgh&lmkn&startrow=20"

preg_match_all('/(\w+)=([^&startrow]+)/', $query, $pairs);

上面的正则表达式停在&,但不在&startrow

预期输出

$pairs[1][0] = link
$pairs[2][0] = http://abcd.com&efgh&lmkn


$pairs[1][1] =startrow
$pairs[2][1] =20

【问题讨论】:

  • 完全不清楚。
  • @revo 抱歉,英语是我的第三语言,我还在学习。我编辑了我的问题,希望你现在能理解
  • 当有&startrow或者不在url中时应该输出什么?请在这两种情况下显示预期的输出。
  • @revo 再次编辑答案

标签: php regex get


【解决方案1】:

您不需要正则表达式;你需要parse_str():

$ php -a 启用交互模式 php > $params = null; php > parse_str('link=http://abcd.com&efgh&lmkn&startrow=20', $params); php > var_dump($params); php外壳代码:1: 数组(4){ '链接' => 字符串(15)“http://abcd.com” 'efgh' => 字符串(0)“” 'lmkn' => 字符串(0)“” '开始' => 字符串(2)“20” }

【讨论】:

  • 再次检查问题,我添加了预期的输出
  • 您的预期输出不正确; http://abcd.com&efgh&lmkn 不是有效的 URL。
  • 但我想要它,我已将链接作为查询
  • StackOverflow 是关于知识共享的,您将其视为代码编写服务,但事实并非如此。
【解决方案2】:

使用以下正则表达式:

(\w+)=((?:(?!&startrow).)+)

您可以分别捕捉这两个部分:

preg_match_all('~(\w+)=((?:(?!&startrow).)+)~', $str, $matches, PREG_SET_ORDER);

PHP 输出:

Array
(
    [0] => Array
        (
            [0] => link=http://abcd.com&efgh&lmkn
            [1] => link
            [2] => http://abcd.com&efgh&lmkn
        )

    [1] => Array
        (
            [0] => startrow=20
            [1] => startrow
            [2] => 20
        )

)

PHP live demo

【讨论】:

    【解决方案3】:

    我不知道为什么这样做会有意义,但假设您的所有请求格式正确且有效,您可以做一些简单明了的事情;)

    $_GET_RAW = [];
    if (!empty($_SERVER['QUERY_STRING'])) {
        // split query string into key value pairs
        foreach (explode('&', $_SERVER['QUERY_STRING']) as $keyValueString) {
            // separate key and value
            list($key, $value) = explode('=', $keyValueString);
            $_GET_RAW[$key]    = $value;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 2013-05-30
      • 2012-08-03
      相关资源
      最近更新 更多