PHP Regex匹配并返回模式的可选部分

时间:2014-04-04 17:39:01

标签: php regex

我试图移动我的路由器以使用正则表达式,但努力获得以下权利。

我使用一个简单的模块(控制器)/动作/参数URI,但参数显然是可选的,可以是单个或多个参数,具体取决于方法。

示例模式:/ pages / view 示例URI:/ pages / view / about_us / mobile

使用preg_match,我想将URI与模式匹配,即使它只是部分匹配但想捕获并使用about_us / mobile(或者它可能是什么)。

我试图让我的调度程序尽可能通用,并希望避免我必须为每个参数添加路由的情况,我将传递给给定的操作/方法。如果我可以捕获about_us / mobile,我可以使用explode使它成为一个数组,并将其传递给给定的控制器方法。

我认为我需要改变我的模式才能这样做,但我不知道该怎么做?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

尝试: #^/([^/]+)/?([^/]+)?/?(.*)?$#

第一个匹配组将是您的控制器,第二个匹配组将是可选操作,第三个匹配组将是可选参数(字符串末尾的所有内容)。

<强>解释

#^            -- delimiter and beginning of string
  /([^/]+)    -- / followed by a match of everything until the next /
  /?([^/]+)?  -- optional / optionally followed by a match of everything until the next /
  /?(.*)?     -- optional / optionally followed by anything else
$#            -- end of string and delimiter

注意:我使用#作为分隔符,因此您无需每隔/转义一次。