RegEx для извлечения свойств изображения HTML - PullRequest
0 голосов
/ 08 декабря 2008

Мне нужен шаблон RegEx для извлечения всех свойств тега изображения.

Как мы все знаем, существует множество искаженных HTML, поэтому шаблон должен охватывать эти возможности.

Я искал это решение /136343/kak-izvlech-img-src-title-i-alt-iz-html-s-pomoschy-php, но он не совсем понял:

Я придумываю что-то вроде:

(alt|title|src|height|width)\s*=\s*["'][\W\w]+?["']

Есть ли какие-то возможности, которые я упущу, или более эффективный простой шаблон?

EDIT:
Извините, я буду более конкретным, я делаю это с использованием .NET, поэтому он на стороне сервера.
У меня уже есть список тегов img, теперь мне просто нужно проанализировать свойства.

Ответы [ 6 ]

5 голосов
/ 08 декабря 2008

Как мы все знаем, существует множество искаженных HTML, поэтому шаблон должен охватывать эти возможности.

Не будет. Используйте анализатор HTML, если вам нужно разобрать «злой» (из неизвестного источника) HTML.

1 голос
/ 03 января 2010

Лучше всего использовать что-то вроде HTML Agility Pack вместо использования регулярных выражений. Он предназначен для обработки множества случаев и может сэкономить вам больше, чем несколько головных болей, благодаря выбиванию краевых корпусов

1 голос
/ 08 декабря 2008

Если производительность не является большой проблемой, я бы пошел с html-парсером (например, BeautifulSoup в python), если вы делаете это на стороне сервера или jquery или просто обычный javascript если вы делаете это на стороне клиента. Конечно, это излишне, но гораздо быстрее, с меньшей вероятностью появления ошибок (так как они уже подумали об угловых случаях), и оно справится с потенциальной неправильной формой.

0 голосов
/ 03 января 2010
/<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)
0 голосов
/ 03 января 2010

Перед тем как приступить к регулярному выражению, посмотрите, что он может сделать: RegEx соответствует открытым тегам, за исключением автономных тегов XHTML

0 голосов
/ 08 декабря 2008

Если вы хотите все значения атрибута, могу я предложить использовать DOM? Что-то вроде element.attributes будет хорошо работать.

Если вы настаиваете на регулярном выражении //\b\w+="[^"]+"// должно получить все.

...