[英]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更具可读性。
尽管您有一些小问题,但看起来您对自己的财产几乎是正确的
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.