获取给定的URI,如下所示:
one/two/three
如何在斜线之间匹配捕获组中的每个角色?这可以通过以下方法完成:
(.+)\/(.+)\/(.+)
这给了我三个组,其中:
$1 = one
$2 = two
$3 = three
我遇到的麻烦是让一个捕获组可选。我认为这将工作,认为我可以使每组可选(匹配零或更多):
(.+)?\/(.+)?\/(.+)?
有没有一种方法,可以使用Regex或PHP选择性地匹配上述URI的one
、two
或two
?
您可以使用以下正则表达式
代码>^(?:(. ?))?(?:\/(. ?))?(?:\/(. ?))?$
这将使所有组都是可选的。主要的一点是将非捕获组与一起使用代码>量词和
编码>模式以将每个部分捕获到单独的组中,以便您以后可以使用
$n
引用它们。
参见示例。
示例代码:
$re = "/^(?:(.+?))?(?:\\/(.+?))?(?:\\/(.+?))?$/m";
$str = "one/two/three\none/two\none\n\n";
preg_match_all($re, $str, $matches);