代码之家  ›  专栏  ›  技术社区  ›  davidmarko

PHP::Cleaner preg_match_all结果

  •  1
  • davidmarko  · 技术社区  · 10 年前

    我正在尝试从外部html页面获取值。

    现在这对我来说很神奇:

    preg_match_all('/id="localWeather">(.*?)<\/div>/',$returnedPage,$returnValues,PREG_SET_ORDER);
    

    但在这行之后,我需要循环结果并清理它。

    为什么?因为我只需要这个 (.*?) 由于某种原因,它还返回了额外的 </div> 关闭标记,所以我需要循环它,然后清理数组。

    我的问题是,我如何强制只返回以下内容: (.*?) ?

    1 回复  |  直到 10 年前
        1
  •  0
  •   Brandon    10 年前

    摆脱 PREG_SET_ORDER 。示例:

    <?php
    
    $returnedPage = '<div id="localWeather">test</div><div id="localWeather">test2</div>';
    
    preg_match_all('/id="localWeather">(.*?)<\/div>/',$returnedPage,$returnValues);
    
    print_r($returnValues);
    

    输出:

    Array
    (
        [0] => Array
            (
                [0] => id="localWeather">test</div>
                [1] => id="localWeather">test2</div>
            )
    
        [1] => Array
            (
                [0] => test
                [1] => test2
            )
    
    )
    

    因此在这种情况下, $returnValues[1] 是一个匹配数组,只包含div之间的内容(而不是结束div),而 $returnValues[0] 是匹配正则表达式的字符串的整个部分的数组。

    此外,不建议使用正则表达式来解析HTML。我会看看PHP的 DOMDocument 类,它更健壮。