我想在 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;
但有些事情不太对劲。有任何想法吗?
我想在 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]
当您尝试匹配斜杠时,您可以使用不同的开始/结束分隔符(我使用 ! 在这种情况下)使正则表达式更具可读性。
看起来你对你所拥有的几乎是正确的,尽管你有一些小问题
if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})\/([^.]+.html )$", $_SERVER['REQUEST_URI'])) : 回声“匹配”; 万一;
此外,您可能应该了解何时使用 (),这些用于确保您在其中存储匹配的任何内容。在您的情况下,我不确定您是否要将每个目录都存储到文件之前。
我的猜测是你有一个文件路径的工作表达式,当你尝试添加文件名部分时它停止工作。
preg_match()
需要指定一对分隔符;在表达式的每一端都有一个。看起来你有这些,但是你在分隔符之外的字符串末尾添加了额外的表达式(即文件名) 。这是无效的。
"/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$"
^ ^
your start delimiter your end delimiter
您需要移动[.]+[.html]$
当前位于结束分隔符之后的表达式代码,使其位于其中。
那应该可以解决问题。