RegEx съвпадение на отворени тагове с изключение на самостоятелни тагове на XHTML

Трябва да съчетая всички тези начални тагове:

<p>
<a href="foo">

Но не и тези:

<br />
<hr class="foo" />

Измислих това и исках да се уверя, че съм го разбрал правилно. Улавям само a-z.

<([a-z]+) *[^/]*?>

Мисля, че се казва:

  • Намерете по-малко от, след това
  • Намерете (и уловете) a-z един или повече пъти, след което
  • Намерете нула или повече интервали, след което
  • Намиране на всеки символ нула или повече пъти, алчно, с изключение на /, след което
  • Намиране на по-голямо от

Правилно ли съм разбрал това? И което е по-важно, какво мислите вие?

Решение

Не можете да анализирате [X]HTML с помощта на regex. Защото HTML не може да се анализира с regex. Regex не е инструмент, който може да се използва за правилно анализиране на HTML. Както вече много пъти съм отговарял тук на въпроси за HTML и regex, използването на regex няма да ви позволи да консумирате HTML. Регулярните изрази са инструмент, който е недостатъчно сложен, за да разбере конструкциите, използвани от HTML. HTML не е регулярен език и следователно не може да бъде анализиран с помощта на регулярни изрази. Запитванията с регулярни редове не са оборудвани, за да разбият HTML на смислените му части. толкова много пъти, но не ми достига. Дори подобрените нерегулярни регулярни изрази, използвани от Perl, не са в състояние да се справят със задачата да анализират HTML. Никога няма да ме накарате да се пречупя. HTML е език с достатъчна сложност, за да не може да бъде анализиран с помощта на регулярни изрази. Дори Джон Скийт не може да анализира HTML с помощта на регулярни изрази. Всеки път, когато се опитвате да анализирате HTML с регулярни изрази, нечестивото дете плаче с кръвта на девойки, а руските хакери пипват уеб приложението ви. Разработването на HTML с регулярни изрази призовава осквернени души в царството на живите. HTML и regex вървят заедно като любов, брак и ритуално детеубийство. не може да издържи е твърде късно. Силата на regex и HTML заедно в едно и също концептуално пространство ще унищожи съзнанието ви като толкова много водниста замазка. Ако анализирате HTML с regex, вие се поддавате на Тях и техните богохулни пътища, които обричат всички нас на нечовешки труд за Този, чието име не може да бъде изразено в Основната многоезична равнина, той идва. HTML-plus-regexp ще втечни нервите на разумните, докато наблюдавате, а психиката ви ще изсъхне под напора на ужаса. HTML-парсерите, базирани на реге̿̔̉х, са ракът, който убива StackOverflow твърде късно е, твърде късно е, не можем да бъдем спасени трансгресията на чи͡лд гарантира, че регексът ще погълне всички живи тъкани (с изключение на HTML, който не може, както беше предсказано по-рано) Господи, помогни ни, как може някой да оцелее в тази напаст използването на regex за обработка на HTML обрича човечеството на вечни ужасни мъчения и дупки в сигурността използването на regex като инструмент за обработка на HTML създава преграда между този святи ужасното царство на c͒ͪo͛ͫrrupt entities (като SGML entities, но по-разрушени), просто да се запознаеш със света на регex парсерите за HTML, ще пренесеш втантично един programmer'с съзнание into a world of ceaseless screaming, he comes, the pestilent slithy regex-infection willl погълне вашия HTML парсер, приложение и съществуване за вечни времена като Visual Basic, само че по-лошо той идва, той идва, той идваes не fight he com̡e̶s, ̕h̵is un̨ho͞ly radiańcé destro҉ying all enli̍̈́̂̈́ghtenment, HTML tags lea͠ki̧n͘g fr̶ǫm ̡yo͟ur eye͢s̸ ̛l̕ik͏e liquid pain, the song of re̸gular expression parsing will extinguish the voices of mortal man from the sphere I can see it can you see ̲͚̖͔̙î̩́t̲͎̩̱͔́̋̀ it is beautiful tтой финалния снуфfing отf лъжатаs на човека ВСИЧКО Е ЛОШ͖̩͇̗̪̏̈́Т АLL IS LOST the pon̷y he comes he c̶̮omes he comes tтойихили пронизваes all МОЯТА ФАСE МОЯТА ФАС ᵒh god no NO NOO̼OO NΘ stop the an*̶͑̾̾̅ͫ͏̙̤g͇̫͛͆̾ͫ̑͆l͖͉̗̩̳̟̍ͫͥͨe̠̅s ͎a̧͈͖r̽̾̈́͒͑e not rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ


Опитвали ли сте вместо това да използвате XML парсер?


Забележка на модератора

Този пост е заключен, за да се предотвратят неподходящи редакции на съдържанието му. Постът изглежда точно така, както трябва да изглежда - няма проблеми със съдържанието му. Моля, не го отбелязвайте, за да му обърнем внимание.

Коментари (3)

Опитайте:

]*?)?(?

Подобен е на вашия, но последният > не трябва да е след наклонена черта, а също така приема h1.

Коментари (8)

Искате първото > да не е предшествано от /. Вижте тук за подробности как да направите това. Това се нарича отрицателен lookbehind.

Въпреки това, едно некоректно изпълнение на това ще доведе до съвпадение на `` в този примерен документ

Можете ли да предоставите малко повече информация за проблема, който се опитвате да решите? Програматично ли итерирате през таговете?

Коментари (1)