У меня есть следующий 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, который я не могу контролировать). Однако это повторяющаяся проблема, о которой мне было бы интересно узнать больше.