preg_match某些img文件类型

时间:2014-03-14 13:43:14

标签: php preg-match expression

需要一些pregmatch的帮助,我想找一个特定的文件类型(jpg,jpeg,png)。任何帮助将不胜感激。

代码:

$strmatch='^\s*(?:<p.*>)?\<a.*href="(.*)">\s*(<img.*src=[\'"].*[\'"]\s*?\/?>)[^\<]*<\/a\>\s*(.*)$';

if (preg_match("/$strmatch/sU", $content, $matches)) { 
        $leadMatch=1;
    }

现在它确实应该并且返回图像,但我希望能够设置图像类型(即使它不会找到.gif)

提前谢谢。

编辑:或者可以插入特定的img alt标签来查找,例如alt =“thisImage”?

2 个答案:

答案 0 :(得分:0)

试试这个:

$strmatch='/^\s*(?:<p.*>)?\<a.*href="(.*)">\s*(<img[\sa-z0-9="\']+src="([a-z0-9]+\.[jpeg]{3,4})"[\sa-z0-9="\']*>)[^\<]*<\/a\>\s*(.*)$/ui';
  • 注意我已经将修饰符放在$ strmatch的末尾,你应该使用u-ngreedy和i-nsentive(case)

答案 1 :(得分:0)

你可以使用这样的东西抓取图像:

<?php

$string = '<a href="index.html" class="bordered-feature-image"><img src="images/3D Logo.jpg" alt="" /></a> <img src="house.png" /> <img src="http://www.google.com/image.gif" alt="" />';

// GRAB THE IMAGES
preg_match_all('~(?<="|\')[A-Z0-9_ /]+\.(?:jpe?g|png)(?=\'|")~i', $string, $images);
$images = $images[0];
print "\nImages From Match: "; print_r($images);

如果您愿意,也可以将图像存储在数组中,然后将该数组插入字符串中。并不是说只需要2-3种图像类型,但如果您想要检查很多东西,这是一个选项。

$accepted_image_types = array('jpg', 'jpeg', 'png');

preg_match_all('~(?<="|\')[A-Z0-9_ /]+\.(?:'.implode('|', $accepted_image_types).')(?=\'|")~i', $string, $images);
$images = $images[0];
print "\nImages Pulled In From Array: "; print_r($images);

以下是REGEX的解释

~  (?<="|\')  [A-Z0-9_ /]+  \.  (?:jpe?g|png)  (?=\'|")  ~i
        ^           ^       ^        ^            ^
        1           2       3        4            5
  1. (?<="|\')这种后视检查确保在开始匹配我们的模式之前有单引号或双引号
  2. [A-Z0-9_ /]+这是一个有效图像名称字符的字符类,后跟一个加号,要求一个或多个字符作为文件名
  3. \.匹配文字点
  4. (?:jpe?g|png)寻找jpgs或pngs的非捕获括号。 'e'后面的问号使其成为可选项
  5. (?=\'|")此前瞻检查以确保在匹配我们的模式后有单引号或双引号
  6. 希望这有帮助!

    Here is a working demo