2014-04-10 177 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