如何捕获格式错误的URL中的文件类型

时间:2013-04-18 02:21:40

标签: php regex preg-match

只是想知道如何提取或匹配特定的文件类型,因为存在大量格式错误的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);

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

使用正则表达式解析URL通常是一个坏主意。有关相关问题,请参阅Getting parts of a URL (Regex)。特别是,看看this answer,然后意识到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在这种情况下效果不佳。