我需要路由器的URL模式,它符合:
/page_name.html
/page_name.html/1
/page_name.html/2
....
/page_name.html/999
并且preg_match()必须将page_name放入匹配[1]和斜杠后放入匹配[2](或空字符串,索引[2]必须始终存在!)。
我需要这个与我的模特不匹配:
/page_name.html/
/page_name.html131
我写了这个:
^\/([\w\-]+)\.html[\/]?([\d]{1,3})?$/
但它会计算像/page_name.html123这样的网址,如果没有数字,则不会将任何内容放入匹配[2]。
答案 0 :(得分:4)
您可以使用此正则表达式:
preg_match('~^/([\w-]+)\.html(?|/(\d{1,3})|())$~', $matches, $input);
(?|...)
- 在此构造的每个替代项中声明的子模式将从同一索引重新开始。这是为了确保始终使用某些内容填充$matches[2]
,甚至是空字符串。