php preg_match_all问题

时间:2012-03-30 12:11:35

标签: php image 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,png&amp; gif,我可以知道如何删除图片网址的扩展名不是jpg,png&amp; gif使用上面的编码?

全部谢谢

2 个答案:

答案 0 :(得分:0)

如果扩展名为png jpg或仅限gif

,则以下正则表达式将返回匹配项
/<img.*?src=\"(.*?)\.(jpg|png|gif)\".*?\/>/i

编辑以照顾您的数字参数

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

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

此致

答案 1 :(得分:0)

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

/<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" />

如果你试图解析html语法,你应该使用htmlsimpledom这样的东西,这样就不那么难理解和实现了