Парсинг повторяющися тегов через регулярки на PHP

Пусть у нас есть не один тег, а несколько. К примеру, несколько абзацев:

<p> text1 </p> <p> text2 </p> <p class="block"> text3 </p>

Давайте напишем код, который получит массив текстов всех абзацев:

<?php preg_match_all('#<p[^>]*>(.+?)</p>#su', $str, $matches, PREG_PATTERN_ORDER); ?>

Проверим, что мы нашли тексты наших абзацев:

<?php var_dump($matches[1]); // ['text1', 'text2', 'text3'] ?>

Получите массив содержимых всех h2:

<h2>111</h2> <p> --- </p> <h2>222</h2> <p> --- </p> <h2 class="last">333</h2> <p> --- </p>