我有多个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>";
}
我希望能够将标题和拇指一起回显。或者如果我可以将它们设置为变量然后将其输出到其他地方?
由于
答案 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>";
}