2011-03-16 84 views
0

我有多個preg匹配表達式,我試圖用它們來輸出不同的東西。我知道如何使用foreach一次輸出一個。但我怎麼回聲或設置他們一個變量?如何在一個foreach循環中使用多個preg_match

preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches); 

    foreach($matches[0] as $titles) 
{ 
    echo "<div class='titles' >".$titles."</div>"; 
} 

preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0], $matches); 

    foreach($matches[0] as $thumbs) 
{ 
    echo "<div class='thumbs' >".$thumbs."</div>"; 
} 

我希望能夠將標題和大拇指一起回顯。或者如果我可以將它們設置爲一個變量,然後輸出到別的地方?

感謝

回答

2

試試這個,

$title = array(); 
$thumb = array(); 

$string = ''; 

preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches); 
foreach($matches[0] as $titles){ 

    $title[] = "<div class='titles' >".$titles."</div>"; 

} 
preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0], $matches); 
foreach($matches[0] as $thumbs){ 

    $thumb[] = "<div class='thumbs' >".$thumbs."</div>"; 

} 
for($i = 0; $i < count($title); $i++){ 

    $string .= $title[$i] . $thumb[$i]; 

} 

echo $string; 
+0

這一個工作!謝謝 – hellomello 2011-03-16 20:00:04

2

如果匹配列表關聯,你可以簡單的結合起來是這樣的:

preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches); 
preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0], $second); 

foreach($matches[0] as $i => $titles) 
{ 
    echo "<div class='titles' >".$titles."</div>"; 
    echo "<div class='thumbs' >".$second[$i]."</div>"; 
} 

注二等preg_match_all如何使用結果變量$second$i是第一個$matches數組的數字索引,但按原樣用於$秒。

Btw。我都是使用正則表達式。但是看到匹配的複雜性,這可能是代碼可能從使用HTML解析器中獲益的情況之一。 phpQuery or QueryPath使提取內容更簡單,並確保標題真的屬於縮略圖。

+0

我會考慮的HTML解析器。我無法讓這個工作。我認爲其他解決方案效果更好,因爲我現在知道如何獲得多個陣列,如果我必須做超過2個。 – hellomello 2011-03-16 20:00:44

1
preg_match_all("/\<div class=\"merchant_info\">\s*(\<div.*?\<\/div>\s*)?(.*?)\<\/div\>/is", $res[0], $matches[]); 
preg_match_all("/\<a class=\"thumb\"(.*?)\<\/a\>/is", $res[0], $matches[]); 

foreach($matches[0][0] as $i => $titles) 
{ 
    echo "<div class='titles' >".$titles."</div>"; 
    echo "<div class='thumbs' >". $matches[1][0][$i]."</div>"; 
}