Php 需要修改函数(regex)的帮助
我正在使用《Webbot、Spider和Screen Scrapers》一书中的parse_数组函数来满足我的解析需求。然而,我需要修改这个函数一点,我不知道如何 职能:Php 需要修改函数(regex)的帮助,php,regex,Php,Regex,我正在使用《Webbot、Spider和Screen Scrapers》一书中的parse_数组函数来满足我的解析需求。然而,我需要修改这个函数一点,我不知道如何 职能: function parse_array($string, $beg_tag, $close_tag) { preg_match_all("($beg_tag(.*)$close_tag)siU", $string, $matching_data); return $matching_data[
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.
$html=”
后
嵌套
这个丢了
第2分部”;
$div\u array=parse\u array($html,“
有些人在面对
问题,想想“我知道,我会用
正则表达式。”现在他们有了
两个问题
解决方案:
编辑:我知道正则表达式不再被推荐
用于解析,有php和DOM
simplehtmldom,但此解析数组
函数工作得很好,如果它
可以处理嵌套的标记,它会
太完美了!有什么可以帮忙的吗
非常感谢。请给我
如果不是完整的解决方案,则给出某种提示
求你了
正则表达式不会也不能计算和跟踪类似的事情。嵌套标记的问题正是不建议使用正则表达式解析HTML的原因,因为它很快就变得不可能了。解析器可能需要更多的工作,但更可靠
但是有一件事你可以尝试,那就是移除U
(ungreedy)正则表达式末尾的标志。“ungreedy”表示它也将匹配第一个
标记,而在默认的“贪婪”模式下,它将匹配最后一个标记。这可能适用于您的特定情况,也可能不适用于您的HTML,但至少值得一试。它无法解决尝试解析嵌套标记的问题一般来说,正则表达式不起作用的话,你就不得不使用解析器了。好了,正则表达式在解析方面很糟糕。你就不能把HTML加载到DOMDocument中吗?另外,如果他们这么说的话,那就把书收起来。这就是为什么我们不使用正则表达式来解析HTML的原因。顺便说一句,这本书非常棒seA
解析器,这个“简单”的解析器几乎不是我最喜欢的:与本机DOMDocument或其他XML函数相比,它的速度非常慢,几乎没有什么好处(如果您喜欢SDHP的函数,只需在DOMDocument
周围编写一个包装器即可)。谢谢,我尝试删除U,但现在匹配太多。我想我必须使用domdocument。。。