Php 字符串末尾的preg_匹配

Php 字符串末尾的preg_匹配,php,preg-match,Php,Preg Match,我正在尝试检查$url的最后一个字符是否为以下字符之一: .gif.png.bmp.jpg.jpeg 这对其中一个很有效: if(!preg\u match('/\.jpg$/',$url)) 但把它们放在一起是行不通的: if(!preg\u match('/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/',$url)) 我做错了什么?当您需要替换时,您正在使用字符类 "/\.(gif|png|bmp|jpe?g)$/" 不能在字符类中放置“字符串”。字符类使用字符,而

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

.gif
.png
.bmp
.jpg
.jpeg

这对其中一个很有效:

if(!preg\u match('/\.jpg$/',$url))

但把它们放在一起是行不通的:

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


我做错了什么?

当您需要替换时,您正在使用字符类

"/\.(gif|png|bmp|jpe?g)$/"
不能在字符类中放置“字符串”。字符类使用字符,而不是字符串。字符类只能匹配多个字符中的一个。

因此,以下正则表达式:

/[\.gif$\.png$\.bmp$\.jpg$\.jpeg$]/
[
]
之间匹配字符列表中的单个字符。另外,请记住点不是字符类中的元字符,因此您不需要
\。
-只要
就足够了,但这并不重要,因为这是一种错误的方法

视觉表现:

利用改变来实现你想要的。例如,
(foo | bar)
匹配
foo
bar
。对于您的需求,以下正则表达式可能会起作用:

/\.(gif|png|bmp|jpe?g)$/
尽管如此,我不会为此使用正则表达式。已经有一个函数专门用于确定文件(或URL)的扩展名:

$ext = pathinfo($url, PATHINFO_EXTENSION);