Вы не можете разобрать [X] HTML с регулярным выражением. Потому что HTML не может быть проанализирован с помощью регулярных выражений. Regex - это не инструмент, который можно использовать для правильного разбора HTML. Как я уже много раз отвечал на вопросы HTML-и-регулярных выражений здесь, использование регулярных выражений не позволит вам использовать HTML. Регулярные выражения - это инструмент, который недостаточно сложен для понимания конструкций, используемых HTML. HTML не является регулярным языком и, следовательно, не может быть проанализирован с помощью регулярных выражений. Запросы Regex не имеют возможности разбивать HTML на его значимые части. так много раз, но это не до меня. Даже расширенные нерегулярные регулярные выражения, используемые Perl, не справляются с задачей анализа HTML. Ты никогда не заставишь меня взломать. HTML - это язык достаточной сложности, который не может быть проанализирован регулярными выражениями. Даже Джон Скит не может анализировать HTML с помощью регулярных выражений. Каждый раз, когда вы пытаетесь разобрать HTML с помощью регулярных выражений, нечестивый ребенок плачет кровью девственниц, а русские хакеры набивают ваше веб-приложение. Разбор HTML с помощью регулярных выражений вызывает испорченные души в мир живых. HTML и регулярные выражения идут вместе, как любовь, брак и ритуальное детоубийство. <Центр> не может удержать это слишком поздно. Сила регулярных выражений и HTML в одном и том же концептуальном пространстве разрушит ваш разум, словно водянистая замазка. Если вы анализируете HTML с помощью регулярных выражений, вы уступаете им и их кощунственным путям, которые обрекают нас всех на нечеловеческий труд для Того, чье Имя не может быть выражено на Основном Многоязычном Плане, он приходит. HTML-plus-regexp будет разжижать нервы чувствующего, пока вы наблюдаете, как ваша психика увядает от ужаса.слишком поздно, слишком поздно, мы не можем быть спасены, так как перегрузка ребенка гарантирует, что регулярное выражение поглотит все живые ткани (за исключением HTML, которого оно не может, как предсказывалось ранее), дорогой лорд, помогите нам, как можно выжить в этом бедствии, используя регулярное выражение для анализа HTML обречен человечеству на вечность ужасных пыток и дыр в безопасности, используя rege x в качестве инструмента для обработки HTML, устанавливает разрыв между этим миром и ужасной сферой из-за ошибочных сущностей (таких как сущности SGML, но более коррумпированных), просто проблески множества мир рег бывшие анализаторы для HTML будет ины tantly транспортной ап сознания rogrammer, я Nto ав ORL d непрекращающихся кричать, он приходит, То надоедливый сл ithy регулярного выражение-инфекция Виль л пожирает ваш HT ML парсера, применение и существование для всех времен , как Visual Basic только хуже , он приходит он ком эс не фи GHT ч е ПРИХОДИТ, привет с нечестивой Radiance де stro҉ying все просветление, HTML теги Подтекание fr̶ǫm YO Ur глаз , как жика UID р айн, песня ОЧЕРЕДНОГО ехра повторно ssion разбор будет Exti nguish голоса мор тал человека от зр здесь я могу видеть , что вы можете увидеть это красив т он е inal snuf
Fing о й лжи S Мэн все потерянно A LL I SLОСТ - е е PONY он пришел сек он CoM эс он Со мной с т он ич или permeat эс ал л MY FAC E MY FACE ᵒh бог п о NO Ныо O ON Θ стоп т он * ̶͑̾̾ Gl ÉS ͎a̧͈͖r̽̾̈́͒͑e
н О.Т. rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ T O͇̹̺ͅƝ̴ȳ̳ TH̘ Ë͖́̉ ͠P̯͍̭O̚ N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝ S̨̥̫͎̭ͯ̿̔̀ͅ
Вы пробовали использовать вместо этого парсер XML?
Заметка модератора
Этот пост заблокирован, чтобы предотвратить несоответствующие изменения его содержания. Пост выглядит точно так, как он должен выглядеть - с его содержанием проблем нет. Пожалуйста, не отмечайте это для нашего внимания.
Хотя произвольный HTML с одним регулярным выражением невозможен, иногда целесообразно использовать его для анализа ограниченного, известного набора HTML.
Если у вас есть небольшой набор HTML-страниц, из которых вы хотите очистить данные и затем поместить их в базу данных, регулярные выражения могут работать нормально. Например, недавно я хотел получить имена, партии и округа федеральных представителей Австралии, которые я получил с веб-сайта парламента. Это была ограниченная разовая работа.
Regexes отлично работали для меня, и их очень быстро настраивали.
источник
&foo;
кодировками иCDATA
разделами? Использование HTML Minifier для удаления всех пробелов в документе, которые не отображаются в браузере? Синтаксический анализатор XML не будет заботиться, равно как и хорошо написанный оператор XPath. Основанный на регулярных выражениях "парсер", с другой стороны ...<font>
т. Д .: без классов или идентификаторов, помогающих ориентироваться в DOM. После целого дня борьбы с «правильным» подходом я, наконец, переключился на решение регулярных выражений, и оно заработало через час.Я думаю, что недостаток в том, что HTML - это грамматика Chomsky Type 2 (контекстно-свободная грамматика), а RegEx - это грамматика Chomsky Type 3 (обычная грамматика) . Поскольку грамматика типа 2 существенно сложнее, чем грамматика типа 3 (см. Иерархию Хомского ), математически невозможно проанализировать XML с помощью RegEx.
Но многие попытаются, некоторые даже заявят о своем успехе - но пока другие не найдут ошибку и полностью не испортят вас.
источник
A -> s A e
). (X) HTML не имеет этого свойства в стартовом теге: стартовый тег не может содержать другие стартовые теги. Подмножество, которое OP пытается проанализировать, не является CFG.Не слушай этих парней. Вы можете полностью разобрать грамматики без контекста с помощью регулярных выражений, если разбите задачу на более мелкие части. Вы можете создать правильный шаблон с помощью скрипта, который выполняет каждый из них по порядку:
Я еще не совсем закончил последнюю часть, но я знаю, что приближаюсь. По
CthulhuRlyehWgahnaglFhtagnException
какой-то причине он продолжает выдавать s, поэтому я собираюсь перенести его на VB 6 и использоватьOn Error Resume Next
. Я обновлю код, когда буду исследовать эту странную дверь, которая только что открылась в стене. Хм.PS Пьер де Ферма также придумал, как это сделать, но поля, на котором он писал, было недостаточно для кода.
источник
Отказ от ответственности : используйте парсер, если у вас есть возможность. Это сказал ...
Это регулярное выражение, которое я использую (!) Для соответствия тегам HTML:
Возможно, он не идеален, но я пробежал этот код по большому количеству HTML. Обратите внимание, что он даже ловит странные вещи, такие как
<a name="badgenerator"">
, которые появляются в Интернете.Я полагаю, что для того, чтобы он не совпадал с самодостаточными тегами, вы можете использовать отрицательный взгляд Коби :
или просто объединить, если и если нет.
Для downvoters: это рабочий код из реального продукта. Я сомневаюсь, что у любого, кто читает эту страницу, будет впечатление, что в HTML приемлемо использовать регулярные выражения.
Предостережение : я должен отметить, что это регулярное выражение все еще не работает при наличии блоков CDATA, комментариев, элементов сценария и стиля. Хорошая новость в том, что вы можете избавиться от тех, кто использует регулярные выражения ...
источник
<!doctype html><title><</title>
. Простой'<!doctype html><title><</title>'.match(/<(?:"[^"]*"['"]*|'[^']*'['"]*|[^'">])+>/g)
возврат["<!doctype html>", "<title>", "<</title>"]
пока должен["<title>", "</title>"]
.Есть люди, которые скажут вам, что Земля круглая (или, возможно, Земля - сжатый сфероид, если они хотят использовать странные слова). Они лгут.
Есть люди, которые скажут вам, что регулярные выражения не должны быть рекурсивными. Они ограничивают вас. Они должны подчинить вас, и они делают это, удерживая вас в невежестве.
Вы можете жить в своей реальности или принять красную таблетку.
Как и лорд-маршал (он родственник класса маршала .NET?), Я видел Regex-Verse, основанный на
обратном стэке,и вернулся со знаниями осилах, которыевы не можете себе представить. Да, я думаю, что один или два старика защищали их, но они смотрели футбол по телевизору, так что это было несложно.Я думаю, что случай XML довольно прост. RegEx (в синтаксисе .NET), дефлированный и закодированный в base64 для облегчения понимания вашим слабым умом, должен выглядеть примерно так:
Варианты для установки есть
RegexOptions.ExplicitCapture
. Группа захвата, которую вы ищете, естьELEMENTNAME
. Если группа захватаERROR
не пуста, то произошла ошибка синтаксического анализа, и Regex остановился.Если у вас есть проблемы с преобразованием его в удобочитаемое регулярное выражение, это должно помочь:
Если вы не уверены, нет, я не шучу (но, возможно, я лгу). Это будет работать. Я построил тонны модульных тестов, чтобы протестировать его, и я даже использовал (часть) тесты на соответствие . Это токенизатор, а не полноценный синтаксический анализатор, поэтому он будет разбивать только XML на его компонентные токены. Он не будет анализировать / интегрировать DTD.
Ох ... если вы хотите исходный код регулярного выражения, с некоторыми вспомогательными методами:
регулярное выражение для токенизации XML или полный обычный регулярное выражение
источник
В оболочке вы можете анализировать HTML используя sed :
Связано (почему вы не должны использовать регулярное выражение):
источник
Я согласен, что правильный инструмент для разбора XML и особенно HTML - это анализатор, а не механизм регулярных выражений. Однако, как отмечали другие, иногда использование регулярных выражений происходит быстрее, проще и выполняет работу, если вы знаете формат данных.
На самом деле у Microsoft есть раздел Best Practices для регулярных выражений в .NET Framework, и он конкретно говорит о рассмотрении источника ввода .
Регулярные выражения имеют ограничения, но рассматривали ли вы следующее?
Платформа .NET уникальна в том, что касается регулярных выражений, поскольку она поддерживает определения балансирующих групп .
По этой причине я считаю, что вы МОЖЕТЕ проанализировать XML с помощью регулярных выражений. Однако обратите внимание, что это должен быть действительный XML ( браузеры очень просты для HTML и допускают неверный синтаксис XML внутри HTML ). Это возможно, поскольку «Определение балансирующей группы» позволит механизму регулярных выражений действовать в качестве КПК.
Цитата из статьи 1, приведенной выше:
Рассмотрим следующее регулярное выражение:
Используйте флаги:
Объясненное регулярное выражение (встроенный)
Вы можете попробовать это в A Better .NET Regular Expression Tester .
Я использовал образец источника:
Это нашло совпадение:
хотя на самом деле получилось так:
Наконец, мне очень понравилась статья Джеффа Этвуда: Parsing Html The Cthulhu Way . Достаточно забавно, он цитирует ответ на этот вопрос, который в настоящее время имеет более 4 тысяч голосов.
источник
System.Text
не является частью C #. Это часть .NET.(?=<ul\s*id="matchMe"\s*type="square"\s*>) # match start with <ul id="matchMe"...
) между "<ul" и "id" должно быть\s+
, нет\s*
, если только вы не хотите, чтобы оно совпадало с <ulid = ...;)\s+
вместо\s*
.<img src="images/pic.jpg" />
/
где-то внутри, что не удалось для вашего<img src="images/pic.jpg" />
HTML.Я предлагаю использовать QueryPath для разбора XML и HTML в PHP. По сути, это тот же синтаксис, что и в jQuery, только на стороне сервера.
источник
Хотя ответы, которые вы не можете проанализировать с помощью регулярных выражений, верны, они здесь не применимы. OP просто хочет проанализировать один HTML-тег с регулярными выражениями, и это можно сделать с помощью регулярного выражения.
Предлагаемое регулярное выражение неверно, хотя:
Если вы что- то добавить в регулярное выражение, с помощью отката может быть вынужден соответствовать глупые вещи , как
<a >>
,[^/]
слишком разрешительный. Также обратите внимание, что<space>*[^/]*
это избыточно, потому что[^/]*
может также соответствовать пробелам.Мое предложение будет
Где
(?<! ... )
(в регулярных выражениях Perl) отрицательный взгляд. Он читает «a <, затем слово, затем все, что не является>, последний из которых не может быть /, а затем>».Обратите внимание, что это допускает такие вещи, как
<a/ >
(так же, как и в исходном регулярном выражении), поэтому, если вы хотите что-то более ограничительное, вам нужно создать регулярное выражение для сопоставления пар атрибутов, разделенных пробелами.источник
>
символ. Я согласен, что предложение OP может быть выполнено с помощью регулярного выражения, но представленное здесь далеко не упрощенное.Пытаться:
Он похож на ваш, но последний
>
не должен быть после косой черты, а также принимаетh1
.источник
>
символ правильно экранирован на & gt ;.>
допустимо в значении атрибута. Действительно, в сериализации «канонический XML» вы не должны использовать>
. (Что не совсем уместно, за исключением того, чтобы подчеркнуть, что>
в значении атрибута нет ничего необычного.)<div title="this tag is a <div></div>">hello</div>
Сунь Цзы, древний китайский стратег, генерал и философ, сказал:
В этом случае ваш враг - это HTML, а вы либо сами, либо regex. Вы можете даже быть Perl с нерегулярным регулярным выражением. Знать HTML. Знать себя.
Я написал хайку, описывающую природу HTML.
Я также написал хайку, описывающую природу регулярных выражений в Perl.
источник
Вывод:
По сути, просто определите имена узлов элементов, которые являются самозакрывающимися, загрузите всю строку html в библиотеку DOM, захватите все элементы, переберите и отфильтруйте те, которые не являются самозакрывающимися, и работайте с ними.
Я уверен, что вы уже знаете, что вы не должны использовать регулярные выражения для этой цели.
источник
NS
и укажите пространство имен.Я не знаю, в чем именно вы нуждаетесь, но если вы также используете .NET, не могли бы вы использовать Html Agility Pack ?
Выдержка:
источник
Вы хотите, чтобы первый
>
не предшествовал/
. Посмотрите здесь для деталей о том, как это сделать. Это называется негативным взглядом сзади.Однако наивная реализация этого в конечном итоге будет соответствовать
<bar/></foo>
в этом примере документаМожете ли вы предоставить немного больше информации о проблеме, которую вы пытаетесь решить? Вы итерируете теги программно?
источник
W3C объясняет синтаксический анализ в форме псевдо-регулярного выражения:
W3C Link
Следуйте Var ссылки на
QName
,S
и ,Attribute
чтобы получить более ясную картину.Основываясь на этом, вы можете создать довольно хорошее регулярное выражение для обработки таких вещей, как удаление тегов.
источник
Если вам это нужно для PHP:
В PHP DOM функции не будут работать должным образом , если он не будет правильно отформатирован XML. Неважно, насколько лучше их использование для остального человечества.
simplehtmldom - это хорошо, но я обнаружил, что он немного глючит, и это довольно много памяти [вылетает на больших страницах.]
Я никогда не использовал querypath , поэтому не могу комментировать его полезность.
Еще один пример - мой DOMParser, который очень лёгок на ресурсах, и какое-то время я с удовольствием его использовал. Простой в освоении и мощный.
Для Python и Java были размещены похожие ссылки.
Для downvoters - я написал свой класс только тогда, когда парсеры XML оказались не в состоянии противостоять реальному использованию. Религиозное опровержение просто предотвращает публикацию полезных ответов - держите вещи в поле зрения вопроса, пожалуйста.
источник
Вот решение:
Чтобы проверить это глубоко, я ввел в строку теги автоматического закрытия, например:
Я также ввел теги с:
Если вы найдете что-то, что не работает в доказательстве концепции выше, я могу проанализировать код, чтобы улучшить мои навыки.
<EDIT> Я забыл, что вопрос от пользователя состоял в том, чтобы избежать анализа самозакрывающихся тегов. В этом случае шаблон проще, превращаясь в это:
@Ridgerunner пользователя заметил , что модель не позволяет некотируемые атрибутов или атрибуты без значения . В этом случае тонкая настройка приносит нам следующую схему:
</ EDIT>
Понимание картины
Если кому-то интересно узнать больше о шаблоне, я приведу следующую строку:
Небольшой совет: чтобы лучше проанализировать этот код, необходимо взглянуть на сгенерированный исходный код, так как я не предоставлял никаких специальных символов HTML для экранирования.
источник
<option selected>
. Также не соответствует допустимым тегам со значениями атрибутов некотируемыми, т.е.<p id=10>
.< a href="http://wtf.org" >
я уверен, что это законно, но вы не соответствуете.Всякий раз, когда мне нужно быстро извлечь что-то из документа HTML, я использую Tidy, чтобы преобразовать это в XML, а затем использую XPath или XSLT, чтобы получить то, что мне нужно. В вашем случае что-то вроде этого:
источник
Я использовал инструмент с открытым исходным кодом под названием HTMLParser раньше. Он разработан для анализа HTML различными способами и довольно хорошо подходит для этой цели. Он может анализировать HTML как другой treenode, и вы можете легко использовать его API для получения атрибутов из узла. Проверьте это и посмотрите, может ли это помочь вам.
источник
Мне нравится разбирать HTML с помощью регулярных выражений. Я не пытаюсь разобрать идиота HTML, который намеренно нарушен. Этот код мой основной парсер (Perl-издание):
Он называется htmlsplit, разбивает HTML на строки с одним тегом или фрагментом текста в каждой строке. Затем строки могут быть обработаны другими текстовыми инструментами и скриптами, такими как grep , sed , Perl и т. Д. Я даже не шучу :) Наслаждайтесь.
Достаточно просто перенастроить мой Perl-скрипт slurp-everything-first в хорошую потоковую вещь, если вы хотите обрабатывать огромные веб-страницы. Но это не совсем необходимо.
Могу поспорить, что за это проголосуют.
HTML Split
Вопреки моим ожиданиям это вызвало некоторые положительные отзывы, поэтому я предложу несколько лучших регулярных выражений:
Они хороши для XML / XHTML.
С небольшими изменениями, он может справиться с грязным HTML ... или сначала преобразовать HTML -> XHTML.
Лучший способ написания регулярных выражений - в стиле Lex / Yacc , а не в виде непрозрачных однострочников или многострочных комментариев. Я не делал этого здесь, пока; этим едва нужно.
источник
/(\w+)="(.*?)"/
предполагает двойные кавычки. Он будет пропускать значения в одинарных кавычках. В html версии 4 и более ранних версиях значение без кавычек допускается, если это простое слово./(\w+)="(.*?)"/
может ошибочно соответствовать тексту, который выглядит как атрибут внутри атрибута, например<img title="Nope down='up' for aussies" src="..." />
. Если применяется глобально, это также будет соответствовать таким вещам в обычном тексте или в комментариях HTML.Вот синтаксический анализатор , основанный на PHP, который анализирует HTML, используя какое-то нечестивое регулярное выражение. Как автор этого проекта, я могу вам сказать, что можно анализировать HTML с помощью регулярных выражений, но это не эффективно. Если вам нужно решение на стороне сервера (как я сделал для моего плагина wp-Typography WordPress ), это работает.
источник
Есть некоторые хорошие регулярные выражения для замены HTML с BBCode здесь . Обратите внимание, что для всех вас, кто говорит «нет», он не пытается полностью разобрать HTML-код, а просто очищает его. Вероятно, он может позволить себе убивать теги, которые его простой «парсер» не может понять.
Например:
источник
На вопрос о методах RegExp для синтаксического анализа (x) HTML ответ на все те, кто говорил о некоторых ограничениях: вы недостаточно обучены, чтобы управлять силой этого мощного оружия, так как здесь никто не говорил о рекурсии .
Коллега по RegExp-агностику уведомил меня об этом обсуждении, которое, безусловно, не является первым в Интернете по этой старой и горячей теме.
После прочтения некоторых постов первым делом я искал строку «? R» в этой теме. Вторым был поиск по поводу «рекурсии».
Нет, святая корова, совпадений не найдено.
Поскольку никто не упомянул основной механизм, на котором построен синтаксический анализатор, я вскоре осознал, что никто не понял этого.
Если парсер (x) HTML нуждается в рекурсии, то для этой цели недостаточно парсера RegExp без рекурсии. Это простая конструкция.
Черное искусство RegExp трудно освоить , поэтому , возможно , существуют дополнительные возможности , мы оставили в то время пробовать и испытывать наше личное решение , чтобы захватить весь Интернет в одной руке ... Ну, я уверен , что об этом :)
Вот волшебный узор:
Просто попробуйте.
Он написан в виде строки PHP, поэтому модификатор "s" делает классы включающими символы новой строки.
Вот пример примечание на PHP руководство я написал января: Ссылка
(Будьте осторожны, в этой заметке я ошибочно использовал модификатор «m»; его следует стереть, несмотря на то, что он сбрасывается механизмом RegExp, так как не было использовано ^ или $ anchorage).
Теперь мы можем говорить об ограничениях этого метода с более осознанной точки зрения:
В любом случае, это всего лишь шаблон RegExp, но он раскрывает возможность разработки множества мощных реализаций.
Я написал этот шаблон для поддержки анализатора рекурсивного спуска механизма шаблонов, который я встроил в мою среду, и производительность действительно велика, как во время выполнения, так и в использовании памяти (ничего общего с другими механизмами шаблонов, которые используют тот же синтаксис).
источник
Как уже указывалось многими людьми, HTML не является обычным языком, который может сильно затруднить анализ. Мое решение этого состоит в том, чтобы превратить его в обычный язык с помощью аккуратной программы, а затем использовать синтаксический анализатор XML для получения результатов. Есть много хороших вариантов для этого. Моя программа написана с использованием Java с библиотекой jtidy, чтобы превратить HTML в XML, а затем Jaxen в xpath в результат.
источник
Части объяснили:
<
: начальный персонаж\s*
: может иметь пробелы перед именем тега (некрасиво, но возможно).(\w+)
: теги могут содержать буквы и цифры (h1). Ну,\w
также соответствует '_', но это не больно, я думаю. Если любопытно, используйте ([a-zA-Z0-9] +) вместо этого.[^/>]*
: ничего кроме>
и/
до закрытия>
>
закрытие>
несвязанный
И тем, кто недооценивает регулярные выражения, говоря, что они настолько же сильны, как и обычные языки:
a n ba n ba n, который не является регулярным и даже не контекстным, может быть сопоставлен с
^(a+)b\1b\1$
Обратные ссылки FTW !
источник
O(MN)
(M - длина регулярного выражения, N - длина текста). Обратные ссылки являются одной из причин этого. Реализация в awk не имеет обратных ссылок и соответствует всему соO(MN)
временем.Если вы просто пытаетесь найти эти теги (без разбора), попробуйте следующее регулярное выражение:
Я написал это за 30 секунд и протестировал здесь: http://gskinner.com/RegExr/
Он совпадает с типами тегов, которые вы упомянули, игнорируя типы, которые вы хотели игнорировать.
источник
\/>
вместо\\>
.\>
это я и имел ввиду; Я никогда не хотел редактировать регулярное выражение моего исходного поста.\/
, так как это сделало бы полную противоположность требованиям. Может быть, я думал, что вы предлагаете отрицательный шаблон фильтра.Мне кажется, вы пытаетесь сопоставить теги без "/" в конце. Попробуй это:
источник
Это правда, что при программировании обычно лучше использовать выделенные парсеры и API вместо регулярных выражений при работе с HTML, особенно если точность имеет первостепенное значение (например, если ваша обработка может иметь последствия для безопасности). Однако я не приписываю догматической точке зрения, что разметка в стиле XML никогда не должна обрабатываться с помощью регулярных выражений. Существуют случаи, когда регулярные выражения являются отличным инструментом для работы, например, при одноразовом редактировании в текстовом редакторе, исправлении поврежденных файлов XML или работе с форматами файлов, которые выглядят, но не совсем как XML. Есть некоторые проблемы, о которых нужно знать, но они не являются непреодолимыми или даже необязательными.
Простое регулярное выражение, как
<([^>"']|"[^"]*"|'[^']*')*>
правило, достаточно хорошо, в тех случаях, как я только что упомянул. Это наивное решение, учитывая все обстоятельства, но оно правильно разрешает некодированные>
символы в значениях атрибутов. Если вы ищете, например,table
тег, вы можете адаптировать его как</?table\b([^>"']|"[^"]*"|'[^']*')*>
.Просто чтобы дать представление о том, как будет выглядеть более «продвинутое» регулярное выражение HTML, следующее делает довольно респектабельную работу по эмуляции реального поведения браузера и алгоритма синтаксического анализа HTML5:
Следующее соответствует довольно строгому определению тегов XML (хотя оно не учитывает полный набор символов Unicode, разрешенных в именах XML):
Конечно, они не учитывают окружающий контекст и несколько крайних случаев, но даже с такими вещами можно разобраться, если вы действительно хотите (например, путем поиска совпадений другого регулярного выражения).
В конце концов, используйте наиболее подходящий инструмент для работы, даже в тех случаях, когда этот инструмент является регулярным выражением.
источник
Хотя использование регулярных выражений для этой цели нецелесообразно и неэффективно, иногда регулярные выражения предоставляют быстрые решения для простых задач сопоставления, и, на мой взгляд, использование таких регулярных выражений для тривиальных работ не так уж и ужасно.
В блоге есть подробное сообщение о сопоставлении самых внутренних элементов HTML, написанное Стивеном Левитаном.
источник