我有以下要解析的html:
<h1 class="x">test</h1>
<p>some text <img src="x" /></p>
<h1 class="x1">test2</h1>
<p>some text </p>
<h1 class="2">test3</h1>
<p>some text <img src="x" /></p>
我可以用一个正则表达式将它解析成一个数组吗?
我试过
preg_match_all('#(<h1[^>]*?>)(.*?)(</h1>)(.*)#ism',$html,$arr);
这只给了我一个条目,因为正则表达式的最后一部分是贪婪的,并且
preg_match_all('#(<h1[^>]*?>)(.*?)(</h1>)(.*?)#ism',$html,$arr);
这没有给我任何 之间的 HTML <h1>
,因为表达式不是贪婪的。
如何使匹配后的部分变得贪婪,同时匹配尽可能多的事件?
补充评论:
- 这个问题相当学术,我已经使用 pre_split 解决了这个问题,并且各种其他方法都可以工作,但也可能有缺点(例如 DOM 可能无法在我无法控制的无效 HTML 上工作)。然而,这是一个反复出现的问题,我有兴趣了解更多。