正则表达式只捕获JPG图像

时间:2009-11-16 05:21:09

标签: php regex

我在PHP中有这个正则表达式:

$regex = '/<img[^>]*'.'src=[\"|\'](.*)[\"|\']/Ui';

它捕获字符串中的所有图像标记源,但我只想捕获JPG文件。我试图搞砸(。*),但我只是证明我吮吸正则表达式...现在我正在过滤数组,但感觉太像黑客了,我可以直接用它做一场正确的比赛。

6 个答案:

答案 0 :(得分:6)

试试这个:

$regex = '/<img ([^>]* )?src=[\"\']([^\"\']*\.jpe?g)[\"\']/Ui';

我还删除了不需要的字符类中的额外|

答案 1 :(得分:3)

首先,使用HTML解析器获取所有img标记。然后,选择那些src属性的值与正则表达式\.(jpeg|jpg)$匹配的人。

例如,使用this parser

$html = file_get_html('http://example.foo.org/bar.html');
foreach ($html->find('img') as $img) {
    if (preg_match ("\.(jpeg|jpg)$", $img->src) {
        //save $img or $img->src or whatever you need
    }
}

编辑:我缩短了正则表达式。您也可以使用\.jpe?g$

答案 2 :(得分:0)

只需在关闭引号之前搜索.jpg我相信

$regex = '/<img[^>]*'.'src=[\"|\'](.*\.jpg)[\"|\']/Ui';

答案 3 :(得分:0)

因为您将它用作PHP分隔符,所以必须小心逃避'

同时搜索以.jpgjpeg结尾的文件。

$regex = '/<img[^>]*src=["\']([^\'"]*)\.(jpg|jpeg)["\'][^>]*>/Ui';

答案 4 :(得分:0)

尝试:

$regex = '/<img[^>]*'.'src=[\"|\'](.*[.]jpg)[\"|\']/Ui';

答案 5 :(得分:0)

你们都忘记了标签之间可能有空格&lt;和img

所以正确的正则表达式应该从一开始 /<\s*img