2014-04-03 40 views
0

我沒有問題從下面的代碼中抓取圖像,但是如何修改它以抓取包含在錨中的圖像和圖像?正則表達式:捕獲錨圖像和圖像

 $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches); 
+3

[不使用正則表達式解析HTML代碼,而不是使用DOM解析器!(http://stackoverflow.com/a/1732454/1519058)... – Enissay

+2

你能給一些您想要匹配的示例輸入。另外,你的正則表達式將在一行中匹配第一個到最後一個'src ='。如果所有的html都在一行上,這是一個問題。同樣,如果有任何換行符,它將根本不匹配。 – sln

+0

你需要在服務器端做到這一點嗎?我的意思是,如果您從已發佈的網站抓取此網頁,您是「客戶」,也許是使用jQuery? – celerno

回答

0

您可以使用像這樣搶要麼整個圖像標籤,或只是圖像名稱出字符串:

$string = '<img src="http://www.google.com/trans.gif"> 

<a href="http://www.google.com"><img src="http://www.yahoo.com/images/placeholder.gif"></a>'; 

if (preg_match_all('/<img.*?src=[\'"](.*?)[\'"].*?>/i', $string, $matches)) { 
    print "<pre>"; print_r($matches); print "</pre>"; 
} 
else { 
    print "Could not find any matches"; 
} 

此輸出以下:

Array 
(
    [0] => Array 
     (
      [0] => <img src="http://www.google.com/trans.gif"> 
      [1] => <img src="http://www.yahoo.com/images/placeholder.gif"> 
     ) 

    [1] => Array 
     (
      [0] => http://www.google.com/trans.gif 
      [1] => http://www.yahoo.com/images/placeholder.gif 
     ) 

) 

說明的REGEX:

<img .*? src= [\'"] (.*?) [\'"] .*? > 
^ ^ ^ ^ ^ ^ ^^
    1  2  3  4  5  6  7 8 
  1. <img尋找文字開頭圖像標籤。
  2. .*?匹配任何字符.,任意次數*直到它遇到表達式?的下一部分。在這種情況下,表達式的下一個部分是src=,所以它會停止尋找一些東西。
  3. src=查找src=的確切文本。
  4. [\'"]一個字符類,意思是匹配單引號或雙引號。
  5. (.*?)除了我們將它放在括號內以便我們可以捕獲所發現的內容之外,這與第2號相同。
  6. [\'"]相同的AS號4.
  7. .*?相同的AS號2.
  8. >查找文字大於符號(閉合HTML托架)。

Here is a working demo