2011-02-28 19 views
0

我想匹配所有img s表示:如何preg_match_all具有HTTP頭寬度> 100像素和高度> 80像素的圖像?

  1. 有擴展名之一:JPG | PNG | GIF
  2. srchttp://
  3. ,其寬度> 100和高度開始> 100

我開始用正則表達式:

preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.(jpg|png|gif))\\2/i",$str,$matches); 
+0

如果圖像標籤沒有寬度或高度屬性設置? – 2011-02-28 13:48:30

+2

我寧願能解析這個問題的正則表達式。 – mario 2011-02-28 13:50:02

+0

@尼克韋弗,我的圖片都有寬度或高度的屬性,謝謝。 – cj333 2011-02-28 13:52:32

回答

1

正則表達式中的數字比較並不那麼簡單,而查找width =和height =屬性將需要更復雜的正則表達式。見regex tools

因此,這是一個更簡單的HTML解析器將有意義的情況之一。例如與QueryPath您可以使用:

foreach (qp($html)->find("img, a") as $img) { 
    if ($img->attr("width") >= 100 and ...) { 
     echo $img->attr("src"), $img->attr("href"); 
    } 
} 
使用DOM文檔會更快

當然(也更打字。)

+0

謝謝,但是使用'$ html-> find(「img,a」)'不能匹配圖像是否是'http'開頭,可能是他們想要的「../ imgaes/1.jpg' – cj333 2011-02-28 14:09:20

+0

其實此腳本僅轉儲src或href屬性的值。它不關心它是相對路徑還是以https開頭...... – 2011-02-28 14:11:28

+1

@ cj333爲更多規則添加額外的'if',或者使用' - > find('img [src^=「http」]')過濾。 – mario 2011-02-28 14:13:05

相關問題