2014-04-10 179 views
0

我有一个行源代码的看起来像这样的preg_match找IMG SRC特定IMG标签

<img alt="this field is variable" title="this one too" itemprop="photo" border="0" style="width:608px;" src="imgurl.jpg"> 

有很多网站上的其他图像,所以我不能随便的preg_match所有图像,我需要具体一个,我做了一个特定的preg_match很麻烦,因为“alt”-tag和“title”-tag的内容是可变的。任何人都知道如何去做?提前致谢。

Itemprop =“照片”是这张照片的独特之处。

+0

显然,如果您不告诉我们如何区分_others_img标签和_others_! – arkascha

+0

这些标签是如何突出的,是什么使它们独一无二?如果他们不这样做,反正有它们吗?你有能力给他们添加一些东西吗? –

+0

你可以做[这样的事情](http://stackoverflow.com/questions/6651303/regex-match-img-tag-with-certain-attribute-class),但改变类itemprop否则[这是相当有用的解释正则表达式](http://stackoverflow.com/questions/4231382/regular-expression-pattern-not-matching-anywhere-in-string) – Pete

回答

3

此正则表达式应该工作:

preg_match('/<img[^>]*itemprop="photo"[^>]*src="([^"]+)">/',$source,$matches); 

正则表达式(从regex101)的解释:

Explanation of the regex

其结果将是该阵列$matches英寸

+0

感谢您的解释,它几乎工作,不得不在开始和结束时添加“/”分隔符,使其工作,但很好的答案!赞赏 – Imbue

+0

好的,我会将其添加到我的答案中。 – L3viathan

0

Using regex to parse HTML is not a good thing。为什么不使用DOMDocument来搜索你的元素? PHP具有用于解析HTML文档和检查元素的这些对象,比使用正则表达式试图找到它们要容易得多。然后,您还可以更容易地操作HTML,具体取决于您尝试完成的内容。

$dom = new DOMDocument(); 
$dom->loadHTML(<your html string>); 

$imgs = $dom->getElementsByTagName('img'); 
$photos = []; 
foreach($imgs as $img) { 
     if($img->attributes->getNamedItem('itemprop') && $img->attributes->getNamedItem('itemprop')->nodeValue = 'photo') { 
     $photos[] = $img->attributes->getNamedItem('src')->nodeValue; 
    } 
} 

此代码将让你与你拥有财产imgs的src属性的数组,你是不依赖于如何创建或HTML的实际文本的任何元素。

+0

你不应该使用正则表达式来解析HTML(你不能),但是如果你有一个明确定义的模式,[正则表达式可以是选择的工具](http://stackoverflow.com/a/1733489/ 1016216)。 – L3viathan