$U服务器的PHP正则表达式[“查询”字符串]

$U服务器的PHP正则表达式[“查询”字符串],php,regex,get,Php,Regex,Get,我在用正则表达式配对$pairs[1]将包含=之前的零件,$pairs[2]将包含=之后的零件 当它到达&startrow时,它应该开始跳过rest并开始制作另一对 $query= "link=http://abcd.com&efgh&lmkn&startrow=20" preg_match_all('/(\w+)=([^&startrow]+)/', $query, $pairs); 上述正则表达式在&处停止,但不在&startrow 预期产量 $pairs

我在用正则表达式配对
$pairs[1]
将包含
=
之前的零件,
$pairs[2]
将包含
=
之后的零件

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

$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

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


你不需要正则表达式;你需要:

$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)” “startrow”=> 字符串(2)“20” } 使用以下正则表达式:

(\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
        )

)

绝对不清楚。@抱歉,英语是我的第三语言,我还在学习。我编辑了我的问题,希望您现在能理解,当url中有或没有
&startrow
时,输出应该是什么?请在这两种情况下都显示预期输出。@revo再次编辑了答案选中问题,我添加了预期输出您的预期输出不正确<代码>http://abcd.com&efgh&lmkn不是一个有效的URL。但我想要它,因为queryStackOverflow是关于知识共享的链接,您将其视为一个代码编写服务,而事实并非如此。
preg_match_all('~(\w+)=((?:(?!&startrow).)+)~', $str, $matches, PREG_SET_ORDER);
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
        )

)