Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 允许通过正则表达式使用多个URI参数_Php_Regex - Fatal编程技术网

Php 允许通过正则表达式使用多个URI参数

Php 允许通过正则表达式使用多个URI参数,php,regex,Php,Regex,我离我想要实现的目标非常接近 我有这个: '/create-group/([A-Za-z0-9\-\_]+)(?:/([A-Za-z0-9\-\_]+))?(?:(\?|&)(groupid|copyofgroup|ref)=([A-Za-z0-9\-\_]+))?' 它允许我限制可以键入和访问的URI,例如: /create-group/123/456?groupid=789 在正则表达式的最后一位,我允许使用3个参数(groupid、copyofgroup和ref) 这一切都很好

我离我想要实现的目标非常接近

我有这个:

'/create-group/([A-Za-z0-9\-\_]+)(?:/([A-Za-z0-9\-\_]+))?(?:(\?|&)(groupid|copyofgroup|ref)=([A-Za-z0-9\-\_]+))?'
它允许我限制可以键入和访问的URI,例如:

/create-group/123/456?groupid=789
在正则表达式的最后一位,我允许使用3个参数(groupid、copyofgroup和ref)

这一切都很好,但我想不出一种方法让我的preg_match验证这3个参数的无限个。现在,我只限于一个参数的实例

我希望我的preg_match()接受:

/create-group/123/456?groupid=789&ref=101112&copyofgroup=789
我试过乘法器,比如
*
+
,但都没有用

谢谢大家!

找到了解决方案:

'/create-group/([A-Za-z0-9\-\_]+)(?:/([A-Za-z0-9\-\_]+))?(?:((\?|&)(groupid|copyofgroup|ref)=([A-Za-z0-9\-\_]+))+)?'

您可以在末尾添加{0,3}而不是“?”:

/创建组/([A-Za-z0-9-|]+)(?:/([A-Za-z0-9-|]+)(?:(\?|&)(组ID | copyofgroup | ref)=([A-Za-z0-9-|]+){0,3}

我在这里试过:

为什么你使用正则表达式而不是
$\u GET
$\u POST
$\u REQUEST
超全局?@Nordenheim我不知道你的意思是什么?此代码在获取相关文件之前放置在顶层。我只想限制可以在URI中插入哪些参数。$\u获得superglobals将如何帮助我?将
[A-Za-z0-9\-\\\\\\u]
替换为
[:alnum:][unum:]
。字符在方括号内失去了特殊性,因此不需要用反斜杠转义,两端的破折号表示破折号,而不是范围分隔符。而且字符类很有意义。@Justin01标签建议您使用PHP,这意味着您可以从URI字符串中获取所需的参数,忽略其余的参数,而不是在代码中穿行。非常有趣,不知道为什么我没有想到这一点。非常感谢你!