Regex para encontrar tags HTML

Use /<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g para encontrar todas as correspondências em um texto. Todos os exemplos abaixo foram testados contra o padrão, e você pode abri-los no Regex Tester com os textos de exemplo já carregados.

Atualizado em

/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g
Abrir no Regex Tester

Texto de exemplo

<p class="intro">Hello <strong>world</strong><br/></p><my-card id="x"></my-card>

7 correspondências

<p class="intro"> <strong> </strong> <br/> </p> <my-card id="x"> </my-card>

Como o padrão funciona

ParteSignificado
<Colchete angular de abertura
\/?Barra opcional para tags de fechamento
[A-Za-z][A-Za-z0-9-]*Nome da tag, incluindo elementos personalizados como my-card
(?:\s[^<>]*)?Atributos opcionais
\/?>Barra opcional de autofechamento e o colchete de fechamento

Exemplos de código

JavaScript

const matches = text.match(/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g) ?? [];

Python

import re

matches = re.findall(r'</?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?/?>', text)

PHP

preg_match_all('/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/', $text, $m);
$matches = $m[0];

Notas e limitações

Serve bem para buscas rápidas e destaques, mas regex não consegue analisar HTML de forma confiável (comentários, scripts, atributos contendo >). Use DOMParser ou um parser de verdade para qualquer coisa importante. Para remover tags e manter o texto, veja remover tags HTML com regex.

Perguntas frequentes

Qual é o regex para encontrar tags HTML?
/<\/?[A-Za-z][A-Za-z0-9-]*(?:\s[^<>]*)?\/?>/g — ele encontra todas as correspondências em um texto. Veja a tabela acima para entender o que cada parte faz.
Funciona em Python e PHP?
Sim — os exemplos de código acima usam o mesmo padrão com re em Python e funções preg em PHP.
Como testo este regex?
Clique em “Abrir no Regex Tester” — o padrão, as flags e o texto de exemplo são carregados automaticamente, e as correspondências são destacadas conforme você edita.