Форумы Форум www.proxomitron.ru
Все о программе Proxomitron
Главная  • FAQ для форума  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Личные сообщения  •  Вход
 Особенности языка фильтров
 Сайт -> Форумы » Общие вопросы
Следующая тема
Предыдущая тема

Новая тема  Ответить
Автор Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Пн, Май 30 2005 16:30 Цитировать |  |  | 

Раз уж мы начали вдаваться в недокументированные тонкости Прокса, выделим отдельно такую насущную тему, как язык фильтров.

Для начала -- результаты изысканий зарубежных коллег:

http://sidki.proxfilter.net/prox/sidki-etc/Techniques.txt

И так как уже пара ресурсов загнулась, процитирую sidki здесь:
Код:
Uncommon Techniques for Naoko 4.5
=================================

This is a collection of methods or "nuances" in Proxomitron's matching language
that are not well known.  It is intended for those that are already familiar
with the official help files.

sidki, December 2004 -- updated February 2006



1  HTTP header fields may start with multiple whitespaces (RFC2616 SEC 4.2).
   To cover this, $IHDR() and $OHDR() need two spaces after the colon, because
   the first space lacks the full "zero to infinite" magic.

Examples:
$IHDR(X-Test:( ) foo)
$IHDR(Content-Length:( ) \1)
$OHDR(User-Agent:( ) weird_ua_that_prepends_multi_spaces)


2  You don't need to match the entire value string in $IHDR(), $OHDR(),
   $RESP(), or $URL() commands.

Examples:
$IHDR(Content-Type:( ) image/j)
$OHDR(User-Agent:*opera)
$RESP(2)
^$RESP([345])
$URL(http://www.Shonen.Knife.com/Naoko/M)


3  Variables can be conditionally set by inserting a test.

Examples:
$SET(0=$TST(foo=false)new value)                 \0 is reset
$SET(0=$TST(foo=true)new value)                  \0 = "new value"
$SET(test=$TST(foo=false)new value)            test retains previous value
$SET(test=new$TST(foo=false) value)            test = "new"
$SET(test=new$TST(foo=true) value)             test = "new value"


4a Local variables or meta-chars that are not supposed to expand until
   replacement - unless when used with commands like $ADDLST() or a global
   $SET() - can also be expanded in a string test by using parens.

Examples:
$TST((\1)=foo)
$TST((my \1\2)=my foobar)
$TST((\p)=/Naoko/Michie/Atsuko/kappa*)
http://$TST((\x))bweb..mysite.com/     matches only if URL command prefix is
                                       present
http://($TST((\x))|)bweb..mysite.com/  matches if URL command prefix may or
                                       may not be present

Note: Direct expansion may leak memory, if used in blocklists.


4b "Replace only" commands expand straight in a string test without need for
   parens.

Examples:
$TST($DTM(w))
$TST($DTM(c)=*1)
$SET(1=%66%6F%6F)$TST($UESC(\1)=foo)


5a You can't test a local variable that has been previously assigned with
   $SET(), unless you expand it immediately.

Examples:
$SET(0=foo)$TST(\0=foo)                        test fails
$SET(0=foo)$TST((\0)=foo)                      test succeeds
$SET(1=foo)$SET(2=bar)$TST((\1\2)=foobar)      test succeeds


5b However, you can reSET a previously assigned local variable and test it,
   as long a you do both in a subexpression that is preceeded by an ampersand.

Examples:
$STOP()(?)\0&$SET(0=)$TST(\0=?)                test fails
$STOP()(?)\0$SET(0=)&$TST(\0=?)                test succeeds


6  Local variables can be reused (assign -> use -> reassign) with global
   variables because they are immediately expanded.

Examples:
(???)\0$SET(a=\0)(??)\0$SET(b=\0)
((?)\0$SET(a=$GET(a)\0-))+


7  You can test for the absence of a variable.

Examples:
^$TST(\0=*)
(^$TST(foo=*))match_expr


8  You can stop a filter without letting it match as a whole by placing $STOP()
   anywhere before the match fails -- $STOP() is always processed when
   encountered.
   In below examples PrxFail$TST() is used to force match failure, even if a
   web page should "accommodate" to public Proxomitron filters.  $TST() never
   matches, but is a bit slow and only processed in latter scenario.

Examples:
$STOP()$SET(foo=bar)DontMatchMe           sets stop, sets foo=bar, match fails

(
$TST(var=true)                            if var is "true" process match_expr,
|(^$TST(var=true))$STOP()PrxFail$TST()    else set stop and fail match
)
match_expr


9  Global variables can be set without letting the filter match as a whole by
   placing the $SET() anywhere before the match fails -- global $SETs are
   always processed when encountered, and retained even if match fails.

Examples:
$STOP()$SET(activator=1)DontMatchMe
<(tag1$SET(tag1=1)|tag2$SET(tag2=1))PrxFail$TST()


*EOF*


Последний раз редактировалось: chAlx (Ср, Окт 20 2010 10:20), всего редактировалось 3 раз(а)
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Ср, Июл 06 2005 10:02 Цитировать |  |  | 

Особенности $AV() и $AVQ():
строку "zz_zz\" оно понимает как строку без кавычек. Соответственно, строку "zz zz\" понимает как два раза без кавычек, а не как один параметр.
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Чт, Авг 18 2005 09:19 Цитировать |  |  | 

Из той же темы, на которую ссылка в первом посте, но более конкретно:
Особенности $TST().

_________________
Как правильно задавать вопросы
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Пн, Апр 17 2006 20:54 Цитировать |  |  | 

1. Не стоит использовать конструкции вида ((A)&(^B)), тем более что гораздо проще написать (^B)(A).

2. $AV() не любит, когда в скобках ничего не указано. Для проверки пустого параметра можно использовать $AV(^?).
К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Пт, Окт 06 2006 10:13 Цитировать |  |  | 

К началу Профиль Сообщение
chAlx
Moderator
Moderator


Зарегистрирован: 30.06.2004
Сообщения: 2625
Откуда: SPb

СообщениеДобавлено: Вт, Окт 19 2010 21:09 Цитировать |  |  | 

К началу Профиль Сообщение
Показать сообщения:      
 
Новая тема  Ответить

 Перейти:   




Следующая тема
Предыдущая тема
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


P o w e r e d b y p h p B B © p h p B B G r o u p :: T h e m e b a s e d o n FI T h e m e :: Часовой пояс: GMT + 3