RegEx,匹配html标签组

时间:2016-09-07 18:17:53

标签: regex

假设我们有一些像这样的HTML:

<html>
    <body>

        <h2>Match group</h2>
        <ul>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
        </ul>

        <h2>Match group 2</h2>
        <ul>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
        </ul>

        <h2>Match group n</h2>
        <ul>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
        </ul>

        <h2>NOMATCH</h2>
        <ul>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
            <li>Item 1</li>
        </ul>

    </body>
</html>

我们如何提取h2标签包含单词 match 的所有h2和ul标签组?基本上我需要为这组元素添加一个容器div:

<div id="container">
<h2>Match group 1></h2><ul>...</ul>
<h2>Match group 1></h2><ul>...</ul>
<h2>Match group N></h2><ul>...</ul>
</div>
<h2>NOMATCH</h2>
<ul>...</ul>

H2和ul标签可能包含任意数量的html属性。

这是我到目前为止所得到的: https://regex101.com/r/mR2fT7/1

任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:1)

正如其他人所说,你需要一个DOM解析器来实现这一点。 DOM解析器是这项工作的正确工具。但只是为了回答您的问题,如果输入字符串结构始终保持不变,您可以通过以下方式提取所需的import cmath #Your Variables a = 5 b = 5 c = 5 #The Discriminant d = (b**2) - (4*a*c) #The Solutions solution1 = (-b-cmath.sqrt(d))/(2*a) solution2 = (-b+cmath.sqrt(d))/(2*a) print (solution1) print (solution2) 组:

h2 + ul

Live demo

答案 1 :(得分:0)

使用DOM解析器:

$dom = new DOMDocument();
$dom->loadHTML($data);

$xpath = new DOMXPath($dom);
$headlines = $xpath->query("//h2[contains(., 'Match')]");
print_r($headlines);

请参阅a demo on ideone.com