Мне нужен шаблон RegEx для извлечения всех свойств тега изображения.
Как мы все знаем, существует множество искаженных HTML-кодов, поэтому шаблон должен учитывать эти возможности.
Я смотрел на это решение https://stackoverflow.com/questions/138313/how-to-extract-img-src-title-and-alt-from-html-using-php, но он не совсем понял его:
Я придумываю что-то вроде:
(alt|title|src|height|width)\s*=\s*["'][\W\w]+?["']
Есть ли какие-то возможности, которые мне не хватает, или более эффективный простой шаблон?
Обновлено:
Извините, я буду более конкретным, я делаю это с помощью .NET, поэтому он находится на стороне сервера.
У меня уже есть список тегов img, теперь мне просто нужно проанализировать свойства.





As we all know, there are lots of malformed HTML out there, so the pattern has to cover those possibilities.
Не будет. Используйте парсер HTML, если вам нужно разобрать «злой» (из неизвестного источника) HTML.
Если вам нужны значения атрибута все, могу ли я предложить использовать DOM? Что-то вроде element.attributes подойдет.
Если вы настаиваете на регулярном выражении, //\b\w+ = "[^"]+"// должен получить все.
Если производительность не является большой проблемой, я бы пошел с парсером html (например, BeautifulSoup в python), если вы делаете это на стороне сервера, или jquery, или просто javascript, если вы делаете это на стороне клиента. Конечно, это перебор, но он намного быстрее, с меньшей вероятностью будет содержать ошибки (так как они подумали о крайних случаях), и он справится с потенциальной некорректностью.
Лучше всего использовать что-то вроде Пакет гибкости HTML вместо использования регулярного выражения. Он предназначен для обработки большого количества случаев и может сэкономить вам больше, чем несколько головных болей, благодаря выбиванию крайних корпусов.
Прежде чем использовать регулярное выражение, посмотрите, что он умеет: RegEx сопоставляет открытые теги, кроме автономных тегов XHTML.
/<img(\s+([a-z]{3,})=(["']([^"']*)["']|[\S]))+\s*/?>/i
Будет возвращено match_all (формат зависит от вашей библиотеки, но ключевые индексы есть):
0 -> image tag
1 -> attribute
2 -> attribute name
3 -> attribute value (with enclosing quotes if exists)
4 -> attribute value (without enclosing quotes if it has them, otherwise empty, use 3)
Подтв. И снова ответ - это зависит от обстоятельств. Вы можете использовать регулярное выражение, если заранее знаете, над каким точно вы будете работать, вам следует использовать синтаксический анализатор, если вы не можете гарантировать правильность.