$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
)
)