2012-03-30 109 views
0

我想通过检查它的扩展过滤的图像,然后我的编码是如下:PHP preg_match_all问题

preg_match_all("/<img.*?src=\"(.*?)\".*?\/>/i", $this->content, $resultImg); 

,结果会是这样:

Array (
    [0] => xxx/logo.png?1253 
    [1] => xxx/banner.jpg?1253 
    [2] => xxx/6606072563_a9d41ef0ca_z_medium.jpeg?1253 
    [3] => xxx/6605789711_43e2ca1f0d_z_medium.bmp?1253 
) 

但是系统只接受jpg,我可以知道如何通过使用上面的代码删除图像的URL,其中扩展名不是jpg,png & gif?

感谢所有

回答

0

要获取属性,您应该使用|运算符在正则表达式中。 这里是一个丑陋的正则表达式,可以做的工作:

/<img.*?(((class=\"([a-z0-9 ]+)\")|(style=\"([a-z0-9 :;#\-]+)\")|(name=\"([a-z0-9]+)\")|(id=\"([a-z0-9]+)\")|(src=\"(.*?)\.(jpg|png|gif)(\?[0-9]*)?\")).*?)+\/>/i 

我用下面的代码进行测试:

<img style="margin-left:20px;color:#fff;" onclick="javascript::void()" class="xxx" id="4" src="test.gif?12345" name="anam" /> 

如果你尝试分析,你应该使用的东西,像htmlsimpledom HTML语法,即将更难以理解和实施

+0

htmlsimpledom很好,我喜欢它,谢谢grifos。 – 2012-03-30 14:46:57

+0

但我仍然面临同样的问题,如果我使用simple_html_dom,我该如何过滤.bmp文件? – 2012-03-30 14:50:22

+0

我得到它〜foreach($ html-> find('img [src $ =。jpg],img [src $ =。jpeg],img [src $ =。gif],img [src $ =。png]' )as $ element){ \t \t echo $ element-> src。 '
'; \t} – 2012-03-30 15:17:11

0

这以下的正则表达式将返回如果扩展为png JPG或GIF只

/<img.*?src=\"(.*?)\.(jpg|png|gif)\".*?\/>/i 

编辑来照顾你的数字参数

/<img.*?src=\"(.*?)\.(jpg|png|gif)(\?[0-9]*)?\".*?\/>/i 

你应该提高比赛通过把'char作为地址的封装(img标签的src参数) 我很好奇,所以你能解释一下为什么你使用lasy start (*?)运算符?我从来没有使用它,所以不知道它在哪个用例中是有用的。

Regards

+0

嗨grifos,感谢您的回复,如果扩展名后面没有任何词语,例如:aaa.jpg,这是可行的。但如果图像文件包含扩展名后面的额外单词,如aaa.jpg?12345,则无法获取图像... – 2012-03-30 12:43:11

+0

抱歉忘记照顾好您的参数,我会更新我的答案 – grifos 2012-03-30 12:45:24

+0

嗨grifos,谢谢为了您的快速回复,它完美地工作。干得好:) – 2012-03-30 12:58:35