2011-03-16 80 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>"; 
}