正则表达式:匹配可选URI参数

时间:2015-03-31 08:22:36

标签: php regex

获取给定的URI,如下所示:

one/two/three

如何在捕捉组中匹配斜杠之间的每个角色?这可以通过以下方法完成:

(.+)\/(.+)\/(.+)

这给了我三组:

$1 = one
$2 = two
$3 = three

我遇到的问题是让捕获组成为可选项。我认为这会有效,我想我可以让每个组都可选(匹配零或更多):

(.+)?\/(.+)?\/(.+)?

有没有办法,使用Regex或PHP可选地匹配上述URI的部分onetwothree

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式

^(?:(.+?))?(?:\/(.+?))?(?:\/(.+?))?$

这将使所有组都可选。重点是使用具有?量词和.+?模式的非捕获组将每个部分捕获到单独的组中,以便稍后可以使用$n引用它们。

请参阅example

示例代码:

$re = "/^(?:(.+?))?(?:\\/(.+?))?(?:\\/(.+?))?$/m"; 
$str = "one/two/three\none/two\none\n\n"; 
preg_match_all($re, $str, $matches);