2014-04-30 106 views
0

我有一篇文章,裏面有文字和多個圖像,需要分別獲取圖像和文本。使用正則表達式獲取所有圖像和除圖像以外的所有圖像

現在我有這樣的代碼,它只是返回最後一個圖像中的文章:

preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $img); 

如何選擇的所有圖像,並做反向用於獲取只是文本?

謝謝

+0

不要使用正則表達式這個文本節點,使用DOM解析器。 http://phackoverflow.com/a/1732454/362536 – Brad

+0

可能重複的[PHP preg \ _match找到多個事件](http://stackoverflow.com/questions/2029976/php-preg-match-to-find-多發生) – Anonymous

+0

python + beautifulsoup? soup.find_all( 'IMG').. [ 'SRC']? soup.text?如果你可以給我一個樣本數據,我可以提供更多的細節,我可以寫一些POC代碼 –

回答

1

您可以使用該DOM:

$imgSrc = array(); 
$txt = ''; 

$dom = new DOMDocument(); 
@$dom->loadHTML($article); 

$imgs = $dom->getElementsByTagName('img'); 

foreach ($imgs as $img) { 
    $imgSrc[] = $img->getAttribute('src'); 
} 

$xpath = new DOMXPath($dom); 
$textNodes = $xpath->query('//*[not(self::script) and not(self::style)]/text()'); 
foreach ($textNodes as $textNode) { 
    $tmp = trim($textNode->textContent); 
    $txt .= (empty($tmp)) ? '' : $tmp . PHP_EOL; 

} 

XPath查詢詳情:

//意味着在DOM樹
*隨時隨地意味着所有的標籤節點
[.....]定義了一個條件
not(self::script):當前節點不能是一個腳本節點
text()回報

+0

謝謝,$ imgSrc正在工作,但$ txt沒有。我正在使用mysql select獲取$ article,並在其顯示在頁面上之前對其進行處理,但它尚未顯示數據。這是一個問題還是別的? – jakob

+0

@Yesian_:對不起,現在會更好。 –

+0

$ textNodes中的第二個右括號缺失:) – jakob

1
$text = preg_replace('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', '', $article); 
preg_match_all('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $images); 

//use $images and $text 
+1

在HTML解析中,你幾乎從不想使用貪婪的匹配'。+'。使用不明確的'。+?' – HamZa

相關問題