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