如何编写这样的网址模式?

时间:2016-02-01 18:56:49

标签: php regex

我需要路由器的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]。

1 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式:

preg_match('~^/([\w-]+)\.html(?|/(\d{1,3})|())$~', $matches, $input);

RegEx Demo

  • (?|...) - 在此构造的每个替代项中声明的子模式将从同一索引重新开始。这是为了确保始终使用某些内容填充$matches[2],甚至是空字符串。