繁体   English   中英

如何针对网址中的特定模式进行preg_match?

[英]How to preg_match for a specific pattern in a url?

我想在PHP中使用preg_match来测试URL的格式。 该URL如下所示:

/2013/09/05/item-01.html

我正在尝试使它起作用:

if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$", $_SERVER['REQUEST_URI'])) :
    echo "match";
endif;

但是有些不对劲。 有任何想法吗?

尝试:

if (preg_match('!\d{4}/\d{2}/\d{2}/.*\.html$!', $_SERVER['REQUEST_URI'])) {
    echo 'match';
}

\\d[0-9]缩写,当您尝试匹配斜杠时,可以使用不同的开始/结束定界符(在这种情况下,我使用!)使regexp更具可读性。

尽管您有一些小问题,但看起来您对自己的财产几乎是正确的

  1. 您忘了在page.html之前转义最后一个“ /”
  2. [。] +应该是[^。] +,您不是在寻找1个或多个期间,而是在寻找非期间。
  3. 您不应该使用[]来匹配html,而应该使用()或完全不匹配
if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})\/([^.]+.html)$", $_SERVER['REQUEST_URI'])) :
    echo "match";
endif;

另外,您可能应该学习何时使用(),这些用于确保您存储与之匹配的内容。 在您的情况下,我不确定是否要存储每个目录直到文件为止。

我的猜测是您有一个用于文件路径的有效表达式,并且当您尝试添加文件名部分时它停止工作。

preg_match()需要指定一对定界符; 表达式的每一行末尾一个。 看起来好像已经有了这些,但是您已经在定界符之外的字符串末尾添加了额外的表达式(即文件名)。 这是无效的。

  "/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$"
   ^                                  ^
your start delimiter             your end delimiter

您需要将表达式代码[.]+[.html]$到当前在结束定界符之后,使其位于其中。

那应该解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM