如何在一个foreach循环中使用多个preg_match

时间:2011-03-16 06:52:29

标签: php regex multidimensional-array foreach preg-match-all

我有多个preg匹配表达式,我正在尝试使用每个表达式输出不同的东西。我知道如何使用foreach一次输出一个。但是如何回显或设置变量?

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>";
}

我希望能够将标题和拇指一起回显。或者如果我可以将它们设置为变量然后将其输出到其他地方?

由于

3 个答案:

答案 0 :(得分: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数组的数字索引,但是按原样用于$ second。

顺便说一下。我全都使用正则表达式。但是看到匹配的复杂性,这可能是您的代码可能会从使用HTML解析器中受益的情况之一。 phpQuery or QueryPath使提取内容变得更加简单,并确保标题真正属于缩略图。

答案 1 :(得分: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;

答案 2 :(得分: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>";
}