获取给定的URI,如下所示:
one/two/three
如何在捕捉组中匹配斜杠之间的每个角色?这可以通过以下方法完成:
(.+)\/(.+)\/(.+)
这给了我三组:
$1 = one
$2 = two
$3 = three
我遇到的问题是让捕获组成为可选项。我认为这会有效,我想我可以让每个组都可选(匹配零或更多):
(.+)?\/(.+)?\/(.+)?
有没有办法,使用Regex或PHP可选地匹配上述URI的部分one
,two
或three
?
答案 0 :(得分:1)
您可以使用以下正则表达式
^(?:(.+?))?(?:\/(.+?))?(?:\/(.+?))?$
这将使所有组都可选。重点是使用具有?
量词和.+?
模式的非捕获组将每个部分捕获到单独的组中,以便稍后可以使用$n
引用它们。
请参阅example。
示例代码:
$re = "/^(?:(.+?))?(?:\\/(.+?))?(?:\\/(.+?))?$/m";
$str = "one/two/three\none/two\none\n\n";
preg_match_all($re, $str, $matches);