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

按类名显示回声元素

  •  0
  • user3329634  · 技术社区  · 11 年前

    假设我在页面“tst.php”上有更多具有不同类名的a href元素,如下所示:

    <a class='1' href='etc.html'>Link</a>
    <a class='2' href='etc.html'>Link</a>
    <a class='3' href='etc.html'>Link</a>
    <a class='4' href='etc.html'>Link</a>
    <a class='5' href='etc.html'>Link</a>
    <a class='1 2' href='etc.html'>Link</a>
    <a class='1 4' href='etc.html'>Link</a>
    <a class='5 2' href='etc.html'>Link</a>
    <a class='2 3' href='etc.html'>Link</a>
    <a class='2 1' href='etc.html'>Link</a>
    <a class='5 2' href='etc.html'>Link</a>
    <a class='5 2 6' href='etc.html'>Link</a>
    <a class='5 2 6 7' href='etc.html'>Link</a>
    <a class='5 2 5 7 8 9 4 6 2 6' href='etc.html'>Link</a>
    

    我想制作一个php代码,该代码将在另一个页面“echo.php”中对a href的值中包含类名2的元素进行响应。

    像这样的东西

    <?php
    $stream = readfile("tst.php");
    $regex = "class= '2'"
    preg_match_all($regex,$Text,$Match);
    echo $Match all;
    ?>
    

    回声应该仅是类名为“2”的Href:

    <a class='2' href='etc.html'>Link</a>
    <a class='1 2' href='etc.html'>Link</a>
    <a class='5 2' href='etc.html'>Link</a>
    <a class='2 3' href='etc.html'>Link</a>
    <a class='5 2' href='etc.html'>Link</a>
    <a class='5 2 6' href='etc.html'>Link</a>
    <a class='5 2 6 7' href='etc.html'>Link</a>
    <a class='5 2 5 7 8 9 4 6 2 6' href='etc.html'>Link</a>
    

    提前感谢!

    1 回复  |  直到 11 年前
        1
  •  3
  •   Community CDub    8 年前

    You shouldn't use regular expressions for parsing HTML 。您应该使用为此而设计的工具,例如 DomDocument 。下面是一个基本示例:

    <?php
    $dom = new DOMDocument();
    @$dom->loadHTML($string_with_html);
    $anchors = $dom->getElementsByTagName('a');
    foreach($anchors as $anchor) {
        $class = $anchor->getAttribute('class');
        if (strstr($class, '2')) {
            echo $dom->saveHTML($anchor) . "<br>\n";
        }
    }
    

    See it in action

    您也可以使用 xpath :

    $dom = new DOMDocument();
    @$dom->loadHTML($string_with_html);
    $xpath = new DOMXpath($dom);
    $anchors = $xpath->query('//a[contains(@class,"2")]');
    foreach ($anchors as $anchor) {
         echo $dom->saveHTML($anchor) . "<br>\n";
    }