1

只是想知道如何提取或匹配特定的文件类型,因为有很多格式错误的 URL 和目录。

所以我需要一个好的正则表达式来匹配真实的。

http://domain.com/1/image.jpg <-match .jpg
http://domain.com/1/image_1.jpg/.gif <-match first .jpg
http://domain.com/1/image_1.jpg/image.png <-match first .jpg
http://domain.com/1/image_1.jpg <-match .jpg
http://domain.com/1/image.jpg.jpeg <-match only the first .jpg
http://domain.com/1/.jpg <-not match
http://domain.com/.jpg.jpg <- not match
/1/.jpg <-not match
/.jpg.png <-match the first jpg
/image.jpg.png <-match the first jpg

我正在尝试使用这段代码:

preg_match_all('([a-zA-Z0-9.-_](jpg))i', $url, $matches);

有任何想法吗?

4

2 回答 2

0
preg_match('(^(http://domain.com/\w.*?\.jpg))i', $url, $matches);

这将匹配从字符串开头到第一个的所有内容.jpg。文件名部分必须以字母、数字或_.

于 2013-04-18T02:27:54.900 回答
0

使用正则表达式解析 URL 通常是个坏主意。有关相关问题,请参阅获取部分 URL (Regex)。特别是,看看这个答案,然后意识到这parse_url可能是一个好的开始。获取$result['path']并在其上使用文件名解析 API 来提取扩展名。

不过,我不确定您要问的是什么。

http://domain.com/1/image_1.jpg/.gif <-match first .jpg
http://domain.com/1/image_1.jpg/image.png <-match first .jpg

在这两种情况下image_1.jpg都是一个完全有效的目录名。您可以在“/”上拆分路径并检查每个路径的“有效性”。

编辑我刚刚注意到您也需要它来处理相对 URL。 parse_url在这种情况下效果不佳。

于 2013-04-18T02:37:24.087 回答