Задача, требующая оперативного решения: нужно с помощью стандартных регулярных выражений Perl написать фильтр вида s||| , который будет удалять все теги , которые подгружают изображения с посторонних сайтов (т.е. значение параметра SRC представляет абсолютный адрес, доменная часть которого не совпадает с доменной частью адреса загружаемой веб-страницы). На данный момент всё, на что хватило моих собственных способностей выглядит как s|
||sigU Не густо, правда? (этот с позволения сказать фильтр вообще все тэги
убивает. Хотя для некоторых страниц и такой вот радикальный подход является вполне оправданным)
Так что если у кого есть идея получше, предлагайте!
Re: нужен фильтр на основе PCRE для Privoxy #1
$replace_img="/img/fuck_images.jpg"; while (<>){ $_ =~ s/(<[Ii][Mm][Gg])([^"]*(?=[Ss][Rr][Cc]))([Ss][Rr][Cc]=['"])([Hh][Tt][Tt][Pp]|[Ff][Tt][Pp]):\\/\\/[^'"]*([^\>]*(?=\>))/$1 $2 $3${replace_img}$5/g; print $_; }Re: нужен фильтр на основе PCRE для Privoxy #2
Работает!!! (проверено на main page referats.ru)
Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!
Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"
Re: нужен фильтр на основе PCRE для Privoxy #3
Еще раз посмотри, я исправил регулярку. Сбоила, если на одной строке было два и более![]()
Re: нужен фильтр на основе PCRE для Privoxy #4
Хотя вообще-то эта абракадабра делает всё же что-то не совсем то, что мне надо: а где здесь проверка на соответствие доменного адреса (уже на lycos.com изображения не фильтруются)?
Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!
Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"
Re: нужен фильтр на основе PCRE для Privoxy #5
Эта абракадабра ищет все
или 
То есть, если в src указывается интернет-адрес, а не относительный, то картинка режется.
Если надо оставить возможность указывать в виде интернет-адреса адрес некоего хоста (свой же, например), то регуляркой в одну строку тут не получится. Как минимум нужна будет вторая регулярка с проверкой домена.
Re: нужен фильтр на основе PCRE для Privoxy #6
Еще немного кода. Правда, регулярке уже надо два параметра.
$replace_img="http://192.168.192.168/img/fuck_images.jpg"; $my_domain="my.domain.net"; while (<>){ $_ =~ s/(<img>]*(?=>))/$1$2 src=$3${replace_img}$6$7/xsgmi; print $_; }Попробуй это.
$my_domain - имя домена, с которого надо оставлять картинки. Надеюсь, privoxy будет передавать текущий домен (домен страницы) к регулярке.
Re: нужен фильтр на основе PCRE для Privoxy #7
А что обозначает вот эта конструкция: ([^"]*(?=src)); "(?=src)" - это, наверное, что-то типа условного оператора внутри регэкспа, а остальное к чему относится?
]*(?=>))
Как я понимаю (а понимаю я скорее всего неправильно),
$1=(
Вообще, если не затруднит, посмотри в прилагаемый к сообщению default.filter - там по идее должно быть несколько примеров того, как можно получить имя текущего домена в регэкспе. Всё дело в том, что я, к стыду своему, в этом наборе иероглифов совершенно не ориентируюсь и могу подолгу зачарованно-тупо смотреть на рунические письмена фильтров Privoxy, аки баран на новые ворота, но понимания у меня от этого не прибавится ни на йоту... (надо бы мне в ближайшее время справочник по регулярным выражениям изд.-ва O'Reily купить) А вот ты, как достойный ученик великого Аль-Хорезми
, с высокой долей вероятности, сможешь сделать ценные практические умозаключения по итогам брифинг-осмотра некоторых фильтров Privoxy, за что я был бы тебе очень и очень признателен.
Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!
Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"
Re: нужен фильтр на основе PCRE для Privoxy #8
Re: нужен фильтр на основе PCRE для Privoxy #9
Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!
Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"
Re: нужен фильтр на основе PCRE для Privoxy #10
Re: нужен фильтр на основе PCRE для Privoxy #11
Нет, ну ведь не предполагается же эту строку в таком виде на выход посылать. Я имею в виду - нельзя ли создать временную переменную, в которой будет хранится входная строка без содержимого всех двойных кавычек (и самих кавычек), за искл. тех, которые находятся внутри конструкции src \s* = \s* " \s* http://|ftp://....
Эй, оператор-астроном,
Нет звёзд и звёздных глаз -
Есть плац, пивная, гастроном
И горы из колбас!
Марк Мерман, "Никто кино так не снимал, как Лени Риффеншталь"
Re: нужен фильтр на основе PCRE для Privoxy #12