preg_match用于字符串结尾

时间:2014-02-13 15:31:39

标签: php preg-match

我正在尝试检查$url的最后一个字符是否为以下字符之一:

.gif .png .bmp .jpg .jpeg

它适用于其中一个:

if(!preg_match('/\.jpg$/',$url))

但将它们放在一起并不起作用:

if(!preg_match('/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/',$url))

我做错了什么?

由于

2 个答案:

答案 0 :(得分:6)

当你想要交替时,你正在使用一个角色类......

"/\.(gif|png|bmp|jpe?g)$/"

答案 1 :(得分:3)

您不能在字符类中放置“字符串”。字符类使用字符,而不是字符串。字符类只能匹配多个字符中的一个。

所以,以下正则表达式:

/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/

匹配[]之间的字符列表中的单个字符。另外,请记住,点不是字符类中的元字符,因此您不需要\. - 只需.就足够了,但无论如何它都无关紧要,因为这是一种错误的方法。

视觉表现:

match

使用改动来达到你想要的效果。例如,(foo|bar)匹配foo bar。根据您的要求,以下正则表达式可能有效:

/\.(gif|png|bmp|jpe?g)$/

虽然,我不会使用正则表达式。已经有一个为确切目的而构建的函数 - 确定文件(或URL)的扩展名:

$ext = pathinfo($url, PATHINFO_EXTENSION);