匹配特定的HTML无序列表';使用PHP';s正则表达式

匹配特定的HTML无序列表';使用PHP';s正则表达式,php,regex,Php,Regex,给定一个包含多个无序列表的页面,如何使用单个PHP的正则表达式提取单个元素 <html> <head> <title>A title</title> </head> <body> <ul id="list1"> <li>Item 1</li> <li>Item 2</li> </ul> <ul id="list2"> <li>

给定一个包含多个无序列表的页面,如何使用单个PHP的正则表达式提取单个元素

<html>
<head>
<title>A title</title>
</head>
<body>

<ul id="list1">
<li>Item 1</li>
<li>Item 2</li>
</ul>

<ul id="list2">
<li>Item 3</li>
<li>Item 4</li>
</ul>

</body>
</html>

头衔
  • 项目1
  • 项目2
  • 项目3
  • 项目4
如何提取字符串“项目3”和“项目4”

如果首先提取
列表2
中的所有文本,比如
    *?
,然后应用第二个正则表达式来提取各种
  • 的内容,比如
  • *?
  • preg\u-match\u-all()
    ,那么解决方案就很简单了。或者,可以使用DOM


    但是,出于学习目的,我对如何使用单个正则表达式感兴趣。

    最好的解决方案是使用DOM解析工具,因为正则表达式不是解析HTML文件的好方法

    <?
    
    $dom = new DOMDocument;
    $dom->loadHTML($html);
    
    $xpath = new DOMXPath($dom);
    
    $lis = $xpath->query('//ul[@id="list2"]/li');
    
    $text = array();
    
    foreach ($lis as $li) {
        $text[] = $li->nodeValue;
    }
    
    var_export($text);
    
    /*
    array (
      0 => 'Item 3',
      1 => 'Item 4',
    )
    */
    

    通过尝试使用regex执行此操作,您将学到的只是不要使用regex执行此操作