Автор |
Сообщение |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
Помогите пожалуйста вырезать всё между тэгами:
<!--aimg-->*<!--/aimg-->
если вся эта конструкция находится между:
<!--Signature-->*<!--E-Signature-->
Пытался сделать такой фильтр:
Имя фильтра: Cut IMG from SIG
Пределы:
- Совпадения с URL: forum.vingrad.ru
- Разрешить многократное совпадение: checked
- Границы совпадения: <!--Signature*E-Signature-->
- Число байт: 512
Поиск и замена:
- Выражение: <!--aimg*/aimg-->
- Текст замены: (пустое поле)
испытывал на таком примере:
Цитата: |
<!--Signature--><br /><br />--------------------<br />
<div class='signature'><span style='color:navy'>Жизнь — это товар.</span> <span style='color:green'>© PurgeN</span><br /><!--aimg--><a href='http://ciber-slash.hotbox.ru/img/Avatars/sig-3.png' target='_blank'><img src='sig-3000.png' alt='--Resize_Images_Alt_Text--' width='104' height='30' class='attach' /></a><!--Resize_Images_Hint_Text--><!--/aimg--></div><!--E-Signature-->
|
но "Тест" выдал результат "[No Match]"
Как победить?
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Ciber SLasH
Например, так:
Код: |
Bounds = "$NEST(<!--Signature-->,<!--E-Signature-->)"
Limit = 800
Match = "\1"
"$NEST(<!--aimg-->,<!--/aimg-->)"
"\2"
Replace = "\1\2" |
Multiple matches выключен, если там другими фильтрами ничего не надо вырезать.
Sic: правым кликом в списке фильтров можно их вставлять в буфер и из буфера в виде текста.
|
|
|
К началу |
Профиль Сообщение |
 |
Unknown Mystic
Platinum Member

Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.
|
Ciber SLasH ,
Если ты задаешь границы, то в замене должен обработать весь выбранный ими текст, как сделал chAlx.
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
2 chAlx:
Спасибо большое !!
Я даже пробовал почти так, только не учёл того, что нужно обрамлять в \1\2 выражение...
2 Unknown Mystic:
Спасибо за полезную информацию, будем знать...
|
|
|
К началу |
Профиль Сообщение |
 |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
И снова эта же проблема, только теперь не знаю как убрать два подряд идущих тэга <!--aimg-->*<!--/aimg--><!--aimg-->*<!--/aimg--> ?
Один убирается, а другой остаётся...
Код: |
<!--Signature--><br /><br />--------------------<br />
<div class='signature'><!--aimg--><a href='http://www.certifications.ru/public/36rus.gif' target='_blank'><ins by=Alt2title></ins><img src='http://www.certifications.ru/public/36rus.gif' alt='--Resize_Images_Alt_Text--' title='--Resize_Images_Alt_Text--' width='175' height='55' class='attach' /></a><!--Resize_Images_Hint_Text--><!--/aimg--><!--aimg--><a href='http://www.certifications.ru/public/15rus.gif' target='_blank'><ins by=Alt2title></ins><img src='http://www.certifications.ru/public/15rus.gif' alt='--Resize_Images_Alt_Text--' title='--Resize_Images_Alt_Text--' width='175' height='55' class='attach' /></a><!--Resize_Images_Hint_Text--><!--/aimg--><br /><a href='http://lock-team.org' target='_blank'>[LocK-TeaM]</a> <a href='http://vipusers.net' target='_blank'>VIPUserS.NeT</a><br /><span style='color:green'>ICQ# </span><span style='color:red'>7</span><span style='color:blue'>555</span>8<span style='color:red'>7</span></div><!--E-Signature-->
|
Help pleezzz...
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Ciber SLasH
Код: |
Bounds = "$NEST(<!--Signature-->,<!--E-Signature-->)"
Limit = 1600
Match = "(\# $NEST(<!--aimg-->,<!--/aimg-->))+ \#"
Replace = "\@" |
Перенесу-ка я тему на место..
|
|
|
К началу |
Профиль Сообщение |
 |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
2 chAlx:
Спасибо, выручил  .
А можно обяснить как Proxomitron разбирает строку и как применяет выше написанное правило, на простом примере. Допустим строка такая:
Цитата: |
<!--Signature-->
111<!--aimg-->222<!--/aimg--><!--aimg-->333<!--/aimg-->444
<!--E-Signature--> |
я что-то не могу сообразить как работает это правило: (\# $NEST(<!--aimg-->,<!--/aimg-->))+ \#
В частности не ясно почему модификатор \# вставляется в выражение ($NEST(start,end))+ а не перед ним.
Получается, что на каждом проходе мы запоминаем всё, что находится до $NEST() ?
Ещё непонятно что получается при поиске строки... всё что найдено с помощью $NEST() вырезается, а остальное запоминается в стековую переменную ?
Блин, как-то тяжко с языком выражений Proxomitron'а... Обычные реги читать и составлять вроде умею, а здесь просто начинаешь создавать выражение, а оно потом не работает... в итоге просто вводит в ступор...
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Ciber SLasH
Цитата: |
Получается, что на каждом проходе мы запоминаем всё, что находится до $NEST() ? |
Да, всё после предыдущего $NEST().
Цитата: |
всё что найдено с помощью $NEST() вырезается, а остальное запоминается в стековую переменную ? |
Именно. А говоришь: "Не понял" ;)
Если владеешь регэкспами -- прикинь, какое выражение пришлось бы составить для твоего случая.
|
|
|
К началу |
Профиль Сообщение |
 |
Unknown Mystic
Platinum Member

Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.
|
Цитата: |
Получается, что на каждом проходе мы запоминаем всё, что находится до $NEST() ? |
Хмм... Если я правильно тебя понял, то хочу сказать что фрагмент кода просматривается один раз, а не один раз на каждое совпадения $NEST()...
Если "раскрыть" + скажем для случая 2-х тегов, то получиться:
\# $NEST(<!--aimg-->,<!--/aimg-->)\# $NEST(<!--aimg-->,<!--/aimg-->) \#
Думаю так понятнее...
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
Ciber SLasH
Member

Зарегистрирован: 07.11.2005
Сообщения: 70
Откуда: Россия::Питер
|
Спасибо, терь ясно...
|
|
|
К началу |
Профиль Сообщение |
 |
Гудреный
Newbee

Зарегистрирован: 11.11.2005
Сообщения: 12
|
помогите еще вырезать все вот из этого
Цитата: |
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="758" height="208">
<param name="movie" value="images/Whoonline_banner.swf">
<param name="quality" value="high">
<embed src="images/Whoonline_banner.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="758" height="208"></embed></object> |
между <object></object>
я уже задавал подобный вопрос но..
|
_________________ Очень яркое, самое лучшее место - солнечный подоконник. |
|
К началу |
Профиль Сообщение |
 |
Unknown Mystic
Platinum Member

Зарегистрирован: 26.09.2005
Сообщения: 471
Откуда: г. Мытищи, Московская обл.
|
А оно тебе надо? Чем тебе не нравится то, как Flash banner blaster [ALX] режет?
Ну если очень хочется - поменяй у этого фильтра границу на
$NEST(<object>,</object>)
В начало Match добавь:
*\s
Ну и замену поменять тоже надо будет. Это уж как тебе больше нравится.
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
AndyAntonov
Newbee

Зарегистрирован: 14.01.2010
Сообщения: 7
|
Хм, кажется нашёл, в какой теме спросить совет. Задача простая, но как решить — не нашёл. Видать, что-то не так понял в справке.
Задача глобально: удалить всё до открывающего <html>, после закрывающего </html> и между </body> и </html>. Всё равно ничего хорошего туда нигде не пишут, ибо не положено. Зато всякую всплывающую лабуду рекламную — очень даже помещают.
Фильтр вида (это я писал килялку на начало кода)
Код: |
Bounds: *<html>
Match: *<html>
Replace: <html> |
выдаёт No match.
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
Alex Qwerty
Gold Member

Зарегистрирован: 20.07.2007
Сообщения: 206
|
А Byte limit сколько?
Я этим режу мусор до <html>: http://dump.ru/file/4179770
Если в начале BOM UTF-16LE или "<?x" (xml), то ничего не режет.
|
|
|
К началу |
Профиль Сообщение |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
AndyAntonov:
Цитата: |
удалить всё до открывающего <html> |
Вообще-то там бывает весьма полезный DOCTYPE..
Собственно, идея фильтра очевидна: (</body>)\1*(</html>)\2 заменить на \1\2. Вопросы могут вызывать параметры ( Active, тот же Limit) и синтаксис. Ну и Bounds там ни к чему, он для более сложных (двойных) проверок нужен.
Alex Qwerty:
Зачем выкладывать фильтры на обменниках? Особенно такие мизерные.. Есть же ветка с фильтрами, где можно целый топик развести, и сюда тоже легко запостить..
|
|
|
К началу |
Профиль Сообщение |
 |
Alex Qwerty
Gold Member

Зарегистрирован: 20.07.2007
Сообщения: 206
|
Там байтики BOM 0xff, 0xfe, 0xef, 0xbb, 0xbf - могут попортиться...
Хотя можно попробовать поизвращаться с [%00] - такое байтик 0x00 отлавливает...
|
|
|
К началу |
Профиль Сообщение |
 |
AndyAntonov
Newbee

Зарегистрирован: 14.01.2010
Сообщения: 7
|
Alex Qwerty, ByteLimit ставил 8192 (тестовый пример был 5,5 кБ длиной), выдрал с сайта мелкософта.
Хорошо, DOCTYPE оставить (упустил из виду), но там же и до него могут разного насовать, например http ://microsoft.com/rus/protect/default.mspx# (пробел после http удалить, не использующим ИЕ8 страница доставит). Именно с подобной дрянью я хочу бороться.
Т.е. надо из
Код: |
*<DOCTYPE ...>*<html>*<body>*</body>*</html>* |
оставить только
Код: |
<DOCTYPE ...><html>*<body>*</body></html> |
. А после этого можно и остальным фильтрам на растерзание отдать.
Т.е. Bounds можно не заполнять?
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
Alex Qwerty
Gold Member

Зарегистрирован: 20.07.2007
Сообщения: 206
|
Как-нить так попробуй:
Код: |
[Patterns]
Name = "New HTML filter"
Active = FALSE
Multi = TRUE
Limit = 8192
Match = "(*(<!doctype[^>]+>)\1*(<html)\2|*(<html)\2)"
Replace = "\1\2$STOP()"
|
|
|
|
К началу |
Профиль Сообщение |
 |
AndyAntonov
Newbee

Зарегистрирован: 14.01.2010
Сообщения: 7
|
На тестовом примере съело всё до открывающего <html>. Скрипт после </html> не удалён. Сначала подумал на Limit = 8192 — его может не хватить для сгребания всего между <html> и </html> (я видал статические страницы по 2,5 МБ!, возможно придётся городить связку из двух фильтров) — но увеличение его до 32768 ситуацию не изменило (тестовый пример 10 кБ и в лимит 32 кБ лезет гарантированно).
P.S. Проверил на стартовой странице майл.ру. Скрипт после </html> не удалён. При загрузке Проксомитрон занял одно «ядро» (CPU iP D930) на две минуты полностью  , «улов» был богатым.
P.P.S. Замена на
Код: |
Match = "(*(<!doctype[^>]+>)\1*(<html)\2|*(</html)\2)" |
привела к удалению всего между <html> и </html> на тестовом примере, а скрипты остались. На майл.ру ничего не удалило (Лимит?).
|
|
|
К началу |
Профиль Сообщение ICQ |
 |
chAlx
Moderator

Зарегистрирован: 30.06.2004
Сообщения: 2634
Откуда: SPb
|
Alex Qwerty привёл пример фильтра только для чистки перед <html*>. Его можно дополнить чисткой между <html> и <body>, но не всё же подряд там вырезать.
Для чистки после </body> отдельный фильтр удобнее: буфер большой не нужен (можно вообще рубить лишнее по /k) и первую часть можно спокойно по $STOP() завершить (раз она в отдельном фильтре).
|
|
|
К началу |
Профиль Сообщение |
 |
|