我有一篇文章,裏面有文字和多個圖像,需要分別獲取圖像和文本。使用正則表達式獲取所有圖像和除圖像以外的所有圖像
現在我有這樣的代碼,它只是返回最後一個圖像中的文章:
preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $img);
如何選擇的所有圖像,並做反向用於獲取只是文本?
謝謝
我有一篇文章,裏面有文字和多個圖像,需要分別獲取圖像和文本。使用正則表達式獲取所有圖像和除圖像以外的所有圖像
現在我有這樣的代碼,它只是返回最後一個圖像中的文章:
preg_match('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $img);
如何選擇的所有圖像,並做反向用於獲取只是文本?
謝謝
您可以使用該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()
回報
$text = preg_replace('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', '', $article);
preg_match_all('/<img.+src=[\'"](?P<src>.+?)[\'"].*>/i', $article, $images);
//use $images and $text
在HTML解析中,你幾乎從不想使用貪婪的匹配'。+'。使用不明確的'。+?' – HamZa
不要使用正則表達式這個文本節點,使用DOM解析器。 http://phackoverflow.com/a/1732454/362536 – Brad
可能重複的[PHP preg \ _match找到多個事件](http://stackoverflow.com/questions/2029976/php-preg-match-to-find-多發生) – Anonymous
python + beautifulsoup? soup.find_all( 'IMG').. [ 'SRC']? soup.text?如果你可以給我一個樣本數據,我可以提供更多的細節,我可以寫一些POC代碼 –