提问者:小点点

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


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

one/two/three

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

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

这给了我三个组,其中:

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

我遇到的麻烦是让一个捕获组可选。我认为这将工作,认为我可以使每组可选(匹配零或更多):

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

有没有一种方法,可以使用Regex或PHP选择性地匹配上述URI的onetwotwo


共1个答案

匿名用户

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

代码>^(?:(. ?))?(?:\/(. ?))?(?:\/(. ?))?$

这将使所有组都是可选的。主要的一点是将非捕获组与一起使用量词和模式以将每个部分捕获到单独的组中,以便您以后可以使用$n引用它们。

参见示例。

示例代码:

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