正则表达式匹配URI的可选段?

时间:2011-07-13 19:26:47

标签: php regex

目前,我有一个简单的路由器类,它接受URI并尝试将它们与传入的请求URI相匹配。它可能尝试匹配请求URI的路由的一个简单示例是:

/user/([0-9]+)

因此,这将匹配“user / 1”的请求URI。

现在我正在尝试匹配可选参数。这有效:

/user([/0-9]?)

然而,似乎这将允许该段中的任意数量的斜杠。如何强制选项段前面加上一个斜杠,然后是数字?

1 个答案:

答案 0 :(得分:3)

尝试以下正则表达式:

/user(/[0-9]+)?

它将匹配“/ user”后跟“/”加上一个或多个数字或“/ user”。如果只想对数字进行分组,可以将其括在非捕获组中:

/user(?:/([0-9]+))?

您可以在^的调用中将其括在$preg_match中:

preg_match( "/^\/user(?:\/([0-9]+))?$/", "/user/1234", $m);
print_r($m);