Извлечь имя тега HTML из строки

Я хочу извлечь имя тега из тега HTML с атрибутами.

Например, у меня есть этот тег

 

и мне нужно извлечь имя тега a

Я пробовал следующее регулярное выражение, но оно не работает.

 if ( $raw =~ /^$/ ) { print "$1 is tag name of string\n"; } 

Что не так с моим кодом?

Ваше регулярное выражение не соответствует новой строке. Вы должны использовать флаг s (одна строка), но поскольку ваше регулярное выражение жадно, оно тоже не сработает, также я удалю привязки, так как это может быть несколько тегов в одной строке.

Вы можете использовать регулярное выражение следующим образом:

 < (\w+)\s+\w+.*?> 

Рабочая демонстрация

введите описание изображения здесь

Поддерживая комментарий Бородина, вы не должны использовать регулярное выражение для анализа html, так как вы можете столкнуться с проблемами parsingа. Вы можете использовать регулярное выражение для анализа простых тегов, как у вас, но это можно легко сломать, если у вас есть текст со встроенными тегами, например df>> , в этом случае регулярное выражение будет соответствовать тегу a

Идея этого регулярного выражения состоит в том, чтобы заставить tags иметь хотя бы один атрибут

 let matchTagName = (markup) => { const pattern = /< ([^\s>]+)(\s|>)+/ return markup.match(pattern)[1] } matchTagName("") // "test" matchTagName("") // "test" matchTagName("") // "test-dashed" 

Вы также можете попробовать следующее: он будет соответствовать имени тега (всегда) + атрибутам, если они существуют.

\ < (? <Имя> \ W +) (< атрибуты> \ s + [^?>] * |)>