如何为url中的特定模式preg_match



我想使用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]的缩写,您可以使用不同的开始/结束分隔符(我使用!

当您尝试匹配斜杠时,使regexp更具可读性。

看起来你所拥有的几乎是正确的,尽管你有一些小问题

  1. 你忘记在page.html
  2. 前转义最后一个"/"
  3. [。+应该是[^]。+,你不是在寻找1个或多个周期,你正在寻找任何不是周期的东西。
  4. 你不应该使用[]来匹配html,而应该使用()或什么都不使用
<>之前如果(preg_match("/([0 - 9]{4})/([0 - 9]{2})/([0 - 9]{2 })/([^.]+. html) $ " $ _SERVER [' REQUEST_URI '])):回声"匹配";endif;之前

还应该学习何时使用(),它们用于确保存储匹配的内容。在你的情况下,我不确定你是否想要存储每个目录,直到文件或不。

我猜您有一个文件路径的工作表达式,当您试图添加文件名部分时,它停止工作。

preg_match()需要指定一对分隔符;表达式的两端各有一个。看起来您有这些,但是您在分隔符之外的字符串末尾放置了额外的表达式位(即文件名)。

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

您需要移动当前在结束分隔符之后的表达式代码[.]+[.html]$,以便它在其中。

这应该能解决问题。

相关内容

  • 没有找到相关文章

最新更新