【问题标题】:PHP Regex to match and return optional part of patternPHP Regex 匹配并返回模式的可选部分
【发布时间】:2014-04-04 17:39:01
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 不要使用正则表达式。使用split 分隔斜杠上的路径。

标签: php regex


【解决方案1】:

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

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

说明:

#^            -- 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

注意:我使用# 作为分隔符,这样您就不需要转义每个/

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2015-10-22
    • 2019-04-04
    • 1970-01-01
    • 2012-05-14
    • 2021-05-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    相关资源
    最近更新 更多