Отмена неверного 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 ]ноль или неограниченное количество раз,\/?соответствует прямому слешу ровно один раз, а>это заключительная скобка всего дела.
Регекс это весело.:-)