Pull to refresh

Comments 46

Что-то с картинками не так
и катом
эм…
а если в тэге PRE встретиться последовательность <IMG src=… .../>?
Не важно внутри какого тега. Будет работать.
Это не готовое к употреблению выражение, но в 99% случаев будет работать.
Если парсить страницу целиком, желательно перед этим убрать со страницы скрипты и комменты (отдельной регуляркой)
Особенно проблематичными могут оказаться конструкции типа onmouseover=«document.write('<img src...)»
Дык! В этом и проблема!
Зачем собирать картинки, которые не картинки вовсе, а обычный текст?
Ваша задача — «Задача — найти в HTML все теги IMG»
Вот в текста ниже — НЕТ тэгов IMG!

<IMG src=abc/>


Сорри, хабр съел. Вот правильный листинг:

<PRE>
<IMG src=abc/>
</PRE>
Твоя правда, спорить не буду :)

Тогда небольшая поправка:
Если парсить страницу целиком, желательно перед этим убрать со страницы скрипты и комменты, блоги PRE (отдельной регуляркой)
это можно указать в заметках к топику, чтобы не смущать новичков, чтобы не думали что есть простые лекарства :)
Кстати, а как купить RegexBuddy в России?
Не знаю. Я с таблеткой нашел. :)
Хотя была бы возможность, купил бы!
Оно того стоит!
Я пользуюсь The Regex Coach
Правда, она иногда глючит и приходится проверят на своей собственной програмке простенькой.
Под виндой лучше Expresso (http://www.ultrapico.com/Expresso.htm). Правда нужен хотя бы 2.0 .NET Framework.
Я перепробовал все вышеперечисленные программы, но остановился на лучшей, на мой взгляд, бесплатной «RegEx Tester» sourceforge.net/projects/regextest
Остальные либо глючат, либо платные
UFO just landed and posted this here
Я из Узбекистана. У многих пока нет даже банковского счета. Но не будем о политике…
если имеется в виду, что выводится код в указанном виде, то там будут html-entities
если прямо в таком виде написать — то будет картинка, которая выловится
Проблема в том, что на самом деле внутри
может рендеряться.

http://darkk.net.ru/tmp/image-inside-of-pre.html
Чёртов хабрапарсер. Я про то, что «img» внутри «pre» может рендеряться.
упс. точно. сорри!
что-то я перепутал.
Полезно бы где-нибудь вначале статьи подчеркнуть, что HTML-код разбирается лишь в качестве примера разбора любого, абстрактного кода. Чтобы увидевшие статью начинающие не пытались вручную разбирать HTML-код при наличии DOM, где задача решается простым document.getElementsByTagName('img').
Интересно бы больше узнать о бесплатных тулзах для работы с регулярными выражениями. Пользоваться приходится редко, и в основном для .net, так что вполне устаривают ограничения «должен быть установлен .Net». Пошел за последней версией Regulator (http://sourceforge.net/projects/regulator/), но он при запуске выдавал иксепшен и слетал. Ковырятся в исходниках желания не было, да и задача с регулярным выражением была не настолько серьезной чтобы в исходниках регулятора ковыряться. В итоге на рсдн-е нашел RegEx Tracer (http://www.rsdn.ru/Forum/?mid=1884510), все что мне надо было, он делал. Но, повторюсь, хотелось бы побольше бесплатных тулов для работы с regex-пами.
UFO just landed and posted this here
В комментах выше упоминался «RegEx Tester» sourceforge.net/projects/regextest но меня с самого начала Buddy устроил настолько, что даже не смотрел аналоги.
В нем и библиотека регулярок есть, и код готовый по регулярке создаёт для массы языков, и GREP встроенный для работы с файлами
Вспоминается шутка:
Если у вас проблема и вы ее решаете регулярными выражениями, то у вас две проблемы.


В вашем примере вам быстрее было бы парсер HTML написать, чем так мучаться.
Регулярки нужно знать хотя-бы для того, чтобы никогда не использовать. :)
Таки да :)

Интересно, как по скорости будет работать алгоритм, который вытаскивает все вот этой одной регуляркой и процедура, которая вытащит все и распарсит их отдально на тэги, взяв нужное?
Не обязательно все вытаскивать: можно strpos("<img"..), а дальше парсить :-)
Ну, это страшненько :)
Но вообще, я когда защиту на PHP писал, у меня регэкспы вытаскивали заодно и позицию. Я, правда, от нее назад плясал — мне надо было вытащить все объекты при использовании функций и переменных (...->...).
Если бы я пошел по пути написания одного большого регэкспа, я бы, наверное, до сих пор отлаживал…
Хотя вот там в какой-то момент приходит мысль, что уже неплохо бы и разборщик грамматики написать, вместо всего этого :)
Хм, можно и конечный автомат написать :)
Но я бы сделал так:

/<img[^>]+>/i

Под большинство случаев вполне подойдет. Если надо 100% совпадение со всеми вариантами — тут без КА никак.
с HTML таки да, потому что там есть простая формальная грамматика, и проще сделать парсер. А бывают случаи когда формальной грамматики нет, или она слишком сложная, тогда нужны рэгекспы потому что проще описать некоторые шаблоны чем грамматику.
<img\b, или <img\s+ не забывайте в названиях тэгов. Иначе можно нарваться на xml и пропарсить лишнего.
UFO just landed and posted this here
Как лучшее решение поставленной задачи — да.
Хотя слышал, что уронить html tidy невалидным HTML всё же можно, если постараться.
UFO just landed and posted this here
Запросто. К сожалению пока не встречал библиотеки которая работает хотя бы также четко как броузеры.
«куда лениво захватываются» — может, всё-таки нежадно? Ленивые обычно вычисления…
перевел в лоб «lazy», т.к. учил в основном по английским учебникам.
Официальный перевод lazy в контексте регулярок не встречал, возможно нежадно — более точно
Обычно greedy я встречал в контексте регулярок.
Не рекомендовал бы применять регулярные выражения для работы с HTML.
Проще приводить HTML к валидному XML и потом кучей различных способов его можно обработать и выполнить ту же задачу более качественно и быстро.
Нормальной оффлайн программы для regexp я не нашёл под linux (сижу на kubuntu, kregexpeditor какой-то уж совсем непонятный, альтернативы какие-то хилые), наиболее удобным для себя нашёл онлайн-парсер regexpal.com/ — есть небольшие глюки с выделением результатов, а в остальном — штука отличная, выручает очень часто! Так что рекомендую всем к использованию! Бесплатно и всегда под рукой на любом компе.
Спасибо за regex buddy. Отлаживать регулярки в pipes — то еще удовольствие.: )
Для файрфокса плагин есть «Regular Expressions Tester». Для простого тестирования пойдет.
спасибо за статью, в очередной раз отыскал её в избранном и воспользовался
Sign up to leave a comment.

Articles