我想在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;
但事情并不完全正确。有什么想法吗?
答案 0 :(得分:0)
尝试:
if (preg_match('!\d{4}/\d{2}/\d{2}/.*\.html$!', $_SERVER['REQUEST_URI'])) {
echo 'match';
}
\d
是[0-9]
的缩写,您可以使用不同的开始/结束分隔符(在本例中使用!),以便在尝试匹配斜杠时使正则表达式更具可读性。
答案 1 :(得分:0)
虽然你有一些小问题,但看起来你的情况几乎是正确的
if (preg_match("/([0-9]{4})\/([0-9]{2})\/([0-9]{2})\/([^.]+.html)$", $_SERVER['REQUEST_URI'])) : echo "match"; endif;
此外,您应该知道何时使用(),这些用于确保您存储其中匹配的内容。在您的情况下,我不确定您是否要将每个目录存储到文件中。
答案 2 :(得分:0)
我的猜测是你有一个文件 path 的工作表达式,当你试图添加文件名部分时它停止工作。
preg_match()
需要指定一对分隔符;在表达式的每一端都有一个。看起来你有这些,但你已经在分隔符的字符串外部的末尾添加了一些额外的表达式(即文件名)。这是无效的。
"/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/[.]+[.html]$"
^ ^
your start delimiter your end delimiter
您需要移动当前位于结束分隔符之后的表达式代码[.]+[.html]$
,以使其位于其中。
那应该可以解决问题。