Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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预匹配所有命名组问题_Php_Regex_Preg Match All_Regex Group - Fatal编程技术网

PHP预匹配所有命名组问题

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/(

我正在尝试从以下URI获取分组匹配:

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>[^/]+)