Трябва да съчетая всички тези начални тагове:
<p>
<a href="foo">
Но не и тези:
<br />
<hr class="foo" />
Измислих това и исках да се уверя, че съм го разбрал правилно. Улавям само 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 вървят заедно като любов, брак и ритуално детеубийство.
͎a̧͈͖r̽̾̈́͒͑e
not rè̑ͧ̌aͨl̘̝̙̃ͤ͂̾̆ ZA̡͊͠͝LGΌ ISͮ̂҉̯͈͕̹̘̱ TO͇̹̺ͅƝ̴ȳ̳ TH̘Ë͖́̉ ͠P̯͍̭O̚N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ
Опитвали ли сте вместо това да използвате XML парсер?
Забележка на модератора
Този пост е заключен, за да се предотвратят неподходящи редакции на съдържанието му. Постът изглежда точно така, както трябва да изглежда - няма проблеми със съдържанието му. Моля, не го отбелязвайте, за да му обърнем внимание.
Опитайте:
<([^\s]+)(\s[^>]*?)?(?<!/)>
Подобен е на вашия, но последният >
не трябва да е след наклонена черта, а също така приема h1
.
Искате първото >
да не е предшествано от /
. Вижте тук за подробности как да направите това. Това се нарича отрицателен lookbehind.
Въпреки това, едно некоректно изпълнение на това ще доведе до съвпадение на <bar/></foo>
в този примерен документ
<foo><bar/></foo>
Можете ли да предоставите малко повече информация за проблема, който се опитвате да решите? Програматично ли итерирате през таговете?