我想使用preg_match在PHP中测试URL的格式。URL看起来像这样:
/2013/09/05/item-01.html
I'm trying to get this work:
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]
的缩写,您可以使用不同的开始/结束分隔符(我使用!
看起来你所拥有的几乎是正确的,尽管你有一些小问题
- 你忘记在page.html 前转义最后一个"/"
- [。+应该是[^]。+,你不是在寻找1个或多个周期,你正在寻找任何不是周期的东西。
- 你不应该使用[]来匹配html,而应该使用()或什么都不使用
还应该学习何时使用(),它们用于确保存储匹配的内容。在你的情况下,我不确定你是否想要存储每个目录,直到文件或不。
我猜您有一个文件路径的工作表达式,当您试图添加文件名部分时,它停止工作。
preg_match()
需要指定一对分隔符;表达式的两端各有一个。看起来您有这些,但是您在分隔符之外的字符串末尾放置了额外的表达式位(即文件名)。
"/([0-9]{4})/([0-9]{2})/([0-9]{2})/[.]+[.html]$"
^ ^
your start delimiter your end delimiter
您需要移动当前在结束分隔符之后的表达式代码[.]+[.html]$
,以便它在其中。
这应该能解决问题。