正则表达式提取URL参数 - 重复捕获组

3
我正在尝试通过正则表达式提取URL参数,离成功很近了。我甚至知道问题所在:我的正则表达式在重复捕获组上出现问题。但是我无法弄清楚如何解决它。
语言是PHP。
我的URL看起来像下面这样。它可以没有参数,也可以有一个或多个:
member.php?action=bla&arg=2&test=15&schedule=16

我的正则表达式长这样:

member\.php((?:[\?|&](\w*)=(\w*))*)

我的捕获组最终变成了:

1. action=bla&arg=2&test=15&schedule=16
2. schedule
3. 16

我无法弄清如何单独捕获所有参数。我只能接受第一个捕获组并自己拆分吗?如果可以在一个正则表达式中完成所有工作,那将更为优雅。


1
使用哪种编程语言?正则表达式在不同的编程语言中有不同的风格。 - Muad'Dib
抱歉,这是使用PHP(所以使用PCRE)的内容。 - Zach
3个回答

10
try:
<?php
$str="member.php?action=bla&arg=2&test=15&schedule=16#test";
preg_match_all('/([^?&=#]+)=([^&#]*)/',$str,$m);
print_r($m);

//combine the keys and values onto an assoc array
$data=array_combine( $m[1], $m[2]);
print_r($data);
?>

5

0
提取参数及其值 -> &[\w]*=[\d]*


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接