Есть много вещей, которые вы можете сделать, чтобы найти определенные теги, атрибуты и значения.
Для вашего конкретного случая, чтобы найти несколько известных тегов и сопоставить с остальными
структура тега это просто так:
<(tag1|tag2)(?!\w)(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>
# Open or self contained tags
<
( tag1 | tag2 ) # (1), Add tags here
(?! \w )
(?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+
>
Однако, если вы хотите отследить какой-либо тег с таким именем, вам нужно будет
отслеживать закрывающие теги.
Вы можете комбинировать открытие, закрытие и автономность с помощью этого регулярного выражения:
<(?:((?&tag_names))(?!\w)(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+|\/((?&tag_names))\s*)>(?(DEFINE)(?<tag_names>tag1|tag2))
https://regex101.com/r/QdZL6B/1
И вы можете различить, какая из них основана на какой группе соответствует.
Расширен
<
(?:
( (?&tag_names) ) # (1), Open or self contained tags
(?! \w )
(?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+
|
\/
( (?&tag_names) ) # (2), Close tags
\s*
)
>
(?(DEFINE)
(?<tag_names> # (3 start)
tag1 # Add all your tags here
| tag2
) # (3 end)
)