PHP预匹配所有命名组问题
我正在尝试从以下URI获取分组匹配:PHP预匹配所有命名组问题,php,regex,preg-match-all,regex-group,Php,Regex,Preg Match All,Regex Group,我正在尝试从以下URI获取分组匹配: route: "/user/{user}/{action}" input: "/user/someone/news" 什么是合适的正则表达式?在过去的几个小时里我一直在找我自己 我尝试过类似的方法,但没有结果:( 举例说明: 我的控制器有以下路径:/app/user/{username}/{action} 来自浏览器的请求URI为:/app/user/john/news 在捕获括号中的变量时,如何使用正则表达式模式将该请求URI与该路由匹配?/user/(
route: "/user/{user}/{action}"
input: "/user/someone/news"
什么是合适的正则表达式?在过去的几个小时里我一直在找我自己
我尝试过类似的方法,但没有结果:(
举例说明:
我的控制器有以下路径:/app/user/{username}/{action}
来自浏览器的请求URI为:/app/user/john/news
在捕获括号中的变量时,如何使用正则表达式模式将该请求URI与该路由匹配?/user/(?p[^/]+)/(?p
/user/(?P<user>[^/]+)/(?P<action>[^/]+)
仅解释一下原始正则表达式的几个问题:
[.*]+
仅表示点和星号出现的正数,例如:*.*.
或
或或…
;[^/]+
描述除斜杠以外的任何字符的正数
- 无需转义斜杠,因为当您使用
~
作为分隔符时,斜杠不是特殊字符
- 您的正则表达式在开始时还需要/app,但在字符串中不存在
/user/(?P[^/]+)/(?P
仅解释一下原始正则表达式的几个问题:
[.*]+
仅表示点和星号出现的正数,例如:*.*.
或
或或…
;[^/]+
描述除斜杠以外的任何字符的正数
- 无需转义斜杠,因为当您使用
~
作为分隔符时,斜杠不是特殊字符
- 您的正则表达式在开始时还需要/app,但在字符串中不存在
问题不清楚您到底想匹配什么(给出确切的示例)以及期望的结果是什么(给出示例)。抱歉。我正在尝试使用正则表达式模式将上述输入与路由匹配,并捕获括号之间的片段。路由:/user/{username}输入:/user/john smith regex:?这里有很多地方出了问题或可以改进的地方。1)您的regex以\/app
开始,而输入不是以/app
开始。2)您使用~
作为分隔符,但您正在转义斜杠?为什么?只使用/user/等等。
.3)您使用的是[.]
,将*
放入字符类[]
将使其正则表达式符号无效,因此[.*]
匹配点或星号。我想你不想那样。。。我想你想要像这样的东西。玩得高兴问题不清楚你到底想匹配什么(给出确切的例子)以及期望的结果是什么。(举例)对不起。我试图使用正则表达式模式将上述输入与路由匹配,并捕获括号之间的片段。路由:/user/{username}input:/user/john smith regex:?这里有很多地方出了问题或者可以改进。1) 您的正则表达式以\/app
开头,而输入不以/app
开头。2) 您正在使用~
作为分隔符,但正在转义斜杠?为什么?只需使用/user/etc.
。3) 您正在使用[.*]
,将*
放入字符类[]
将使其正则表达式符号无效,因此[.*]
匹配点或星号。我想你不想那样。。。我想你想要像这样的东西。玩得高兴就是这样;但是,我会使用[^/]+
而不是+
(即使两者都能工作)。另外,应该注意的是,正斜杠没有转义,因为OP使用了~
作为分隔符!非常感谢:)这比我尝试做的事情要简单得多:p@SamSullivan说得好。我已经更新了答案。哈罗德,我很高兴能帮上忙;但是,我会使用[^/]+
而不是+
(即使两者都能工作)。另外,应该注意的是,正斜杠没有转义,因为OP使用了~
作为分隔符!非常感谢:)这比我尝试做的事情要简单得多:p@SamSullivan说得好。我已经更新了答案。哈罗德,我很高兴能帮上忙。
Array
(
[0] => Array
(
[0] => "someone"
)
[user] => Array
(
[0] => "someone"
)
[1] => Array
(
[0] => "news"
)
[action] => Array
(
[0] => "news"
)
)
/user/(?P<user>[^/]+)/(?P<action>[^/]+)