Отмена неверного HTML-кода с помощью регулярных выражений
Мне нужно регулярное выражение pcre, которое выберет все html img теги без src части. Длинная история. С помощью я добрался до (?-s)<img(?!.*?src).*?\/>
который работал нормально, пока строка не получила второй тег img WITH src part. Регулярное выражение соответствует первому <img
с последним />
:(
Как я могу выбрать плохую часть <img border="0" />
от:
<p align="center"><img border="0" /> <a href="http://www.megaevent2014.com/enllac/"><img alt src="http://www.megaevent2014.com/banner/gran/" /></a></p>
В одном регулярном выражении.
И теги img могут быть недействительными по многим причинам. Выделение "границы" не помогает. Мне нужно выбрать теги без src, не заботясь ни о чем другом.
Пожалуйста, совет, С уважением, Питер
1 ответ
Следующий шаблон регулярных выражений работает для меня и должен быть правильно сформирован для регулярных выражений PCRE:
<img(\s*(?!src)([\w\-])+=([\"\'])[^\"\']+\3)*\s*\/?>
- Чтобы разбить его, вы начинаете с буквального
<img
а затем\s*
соответствует любому пробелу[\r\n\t\f ]
ноль или неограниченное количество раз. (?!src)
является негативным взглядом, который гарантирует, что строкаsrc
НЕ соответствует.- Вторая группа захвата
([\w\-])+
ищет любой из[a-zA-Z0-9_]
между одним и неограниченным временем, и является жадным (найдите его столько раз, сколько возможно), и\-
буквально ищет дефис в случае, если он существует где-то внутри<img>
пара тегов. =
это буквальный поиск знака равенства.- Третья группа захвата,
([\"\'])[^\"\']+\3
стремится найти одинарную или двойную кавычку, затем что-нибудь, НО одинарную или двойную кавычку (один или несколько раз), а затем\3
соответствует тому, что было найдено в качестве третьей группы захвата (одинарная или двойная кавычка) - Наконец то
\s*
соответствует любому пробелу[\r\n\t\f ]
ноль или неограниченное количество раз,\/?
соответствует прямому слешу ровно один раз, а>
это заключительная скобка всего дела.
Регекс это весело.:-)