Análise de Blocos em Duas Etapas usando Expressões Regulares em PHP
Ao trabalhar com expressões regulares, não tente resolver um problema complexo com uma única expressão. É melhor aplicar várias expressões regulares sequencialmente.
Vamos ver um exemplo. Suponha que temos o seguinte código:
<p>
---
</p>
<main class="header">
<p>
+++
</p>
<p>
+++
</p>
</main>
Suponha que precisamos extrair todos os parágrafos
da tag main
. Vamos fazer isso em duas
etapas: primeiro, obtemos o conteúdo
da tag main
e, depois, dentro desse
conteúdo, procuramos pelos parágrafos.
Então, primeira etapa. Suponha que o texto de toda a página
esteja armazenado na variável $str1
.
Vamos obter o conteúdo da tag main
:
<?php
preg_match('#<main[^>]*>(.+?)</main>#su', $str1, $match1);
?>
Vamos verificar se capturamos o texto correto:
<?php
$str2 = $match1[1];
var_dump($str2);
?>
Agora, no texto obtido, vamos encontrar todos os parágrafos:
<?php
preg_match_all('#<p[^>]*>(.+?)</p>#su', $str2, $match2, PREG_PATTERN_ORDER);
?>
Vamos verificar se encontramos os textos dos nossos parágrafos:
<?php
var_dump($match2[1]);
?>
Extraia todas as tags h2
da tag aside
:
<main>
<h2>---</h2>
</main>
<aside>
<h2>+++</h2>
<p>
text
</p>
<h2>+++</h2>
<p>
text
</p>
<h2>+++</h2>
<p>
text
</p>
</aside>