我正在使用Webbots,Spiders和Screen Scrapers一书中的parse_array函数来解析我的解析需求。但是我需要修改这个函数,我不知道如何。
功能:
function parse_array($string, $beg_tag, $close_tag)
{
preg_match_all("($beg_tag(.*)$close_tag)siU", $string, $matching_data);
return $matching_data[0];
}
工作原理:
$html="<div>
afterfirst
<div>nested</div>
this is lost
</div>
<div>div2</div>" ;
$div_array = parse_array($html,"<div", "</div>") ;
echo $div_array[0]. "</br>" ;
//outputs:
<div>
afterfirst
<div>nested</div>
//the line "this is lost" and the last </div> isn't included.
基本上该功能无法处理嵌套标签
可以更改功能,以便能够处理嵌套标签吗?也就是说,它不会停留在下一个结束标记,而是跟踪任何其他嵌套标记,并仅在正确的结束标记之后停止
任何帮助?
由于
编辑:我知道正则表达式不会被推荐用于解析,并且有php DOM和simplehtmldom,但是这个解析数组函数效果很好,如果它只能处理嵌套标签,那就完美了!所以对此的任何帮助将不胜感激。如果没有完整的解决方案,请给我一些提示。
答案 0 :(得分:1)
编辑:我知道正则表达式不会被推荐 用于解析,并且有php DOM和 simplehtmldom,但这个解析数组 功能很好,如果只是它 可以处理嵌套标签 完美!所以对此有任何帮助 我将不胜感激。给我吗 如果没有完全解决方案,某种暗示 请。
正则表达式不会也无法计算和跟踪这样的事情。嵌套标签的这个问题正是为什么不建议使用正则表达式解析HTML的原因,因为它很快就变得不可能了。解析器可能更有效,但它更可靠。
您可以尝试一件事,即在正则表达式结束时删除U
(ungreedy)标记。 “ungreedy”意味着它将匹配它出现的第一个</div>
标签,而在默认的“贪婪”模式下它将匹配最后一个。根据您的HTML,这可能适用于您的具体情况,也可能不适用,但至少值得一试。虽然它没有解决尝试用正则表达式解析嵌套标签的问题,但如果这不起作用,你将不得不使用解析器。
答案 1 :(得分:0)