匹配特定的HTML无序列表';使用PHP';s正则表达式
给定一个包含多个无序列表的页面,如何使用单个PHP的正则表达式提取单个元素匹配特定的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>
<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执行此操作