目前,我有一个简单的路由器类,它接受URI并尝试将它们与传入的请求URI相匹配。它可能尝试匹配请求URI的路由的一个简单示例是:
/user/([0-9]+)
因此,这将匹配“user / 1”的请求URI。
现在我正在尝试匹配可选参数。这有效:
/user([/0-9]?)
然而,似乎这将允许该段中的任意数量的斜杠。如何强制选项段前面加上一个斜杠,然后是数字?
答案 0 :(得分:3)
尝试以下正则表达式:
/user(/[0-9]+)?
它将匹配“/ user”后跟“/”加上一个或多个数字或“/ user”。如果只想对数字进行分组,可以将其括在非捕获组中:
/user(?:/([0-9]+))?
您可以在^
的调用中将其括在$
和preg_match
中:
preg_match( "/^\/user(?:\/([0-9]+))?$/", "/user/1234", $m);
print_r($m);