Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何编写这样的url模式?_Php_Regex - Fatal编程技术网

Php 如何编写这样的url模式?

Php 如何编写这样的url模式?,php,regex,Php,Regex,我需要我的路由器的URL模式,该模式将与: /page_name.html /page_name.html/1 /page_name.html/2 .... /page_name.html/999 preg_match()必须将页面名称放入匹配项[1],斜杠后面的数字放入匹配项[2](或空字符串,索引[2]必须始终存在!) 我需要这个来匹配我的父亲: /page_name.html/ /page_name.html131 我写道: ^\/([\w\-]+)\.html[\/]?([\d]{1

我需要我的路由器的URL模式,该模式将与:

/page_name.html
/page_name.html/1
/page_name.html/2
....
/page_name.html/999
preg_match()必须将页面名称放入匹配项[1],斜杠后面的数字放入匹配项[2](或空字符串,索引[2]必须始终存在!)

我需要这个来匹配我的父亲:

/page_name.html/
/page_name.html131
我写道:

^\/([\w\-]+)\.html[\/]?([\d]{1,3})?$/

但它匹配URL,如/page_name.html123,如果没有数字,则不会将任何内容放入匹配[2]中。

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

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

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

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

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

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

此正则表达式与所需内容匹配:
^\/[^.]+\.html(\/\d{1,3})$
此正则表达式与所需内容匹配:
^\/[^.]+\.html(\/\d{1,3})$