preg_匹配某些img文件类型


preg_match certain img file type

需要一些帮助与这一点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"?

试试这个:

$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- insensitive(大小写)

您可以使用类似这样的东西来抓取图像:

<?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. 之前,检查以确保有单引号或双引号。
  3. [A-Z0-9_ /]+这是一个有效的图像名称字符的字符类,后面跟一个加号表示文件名
  4. 需要一个或多个字符
  5. '.匹配文字点
  6. (?:jpe?g|png)查找jpg或png的非捕获括号。"e"后面的问号是可选的
  7. (?=''|")这个向前看检查,以确保有一个单引号或双引号后,它已经匹配我们的模式

希望这对你有帮助!

这是一个工作演示