Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要修改函数(regex)的帮助_Php_Regex - Fatal编程技术网

Php 需要修改函数(regex)的帮助

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[

我正在使用《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[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的原因。顺便说一句,这本书非常棒se
A
解析器,这个“简单”的解析器几乎不是我最喜欢的:与本机DOMDocument或其他XML函数相比,它的速度非常慢,几乎没有什么好处(如果您喜欢SDHP的函数,只需在
DOMDocument
周围编写一个包装器即可)。谢谢,我尝试删除U,但现在匹配太多。我想我必须使用domdocument。。。