Страница 2 из 4

Правила замещения

Добавлено: Сб фев 03, 2007 10:07 am
adre
на основе примера из документации:
/play (poker|games|casino)/$1 online/
попробовал написать фильтр:
/(play|win|online) (poker|games|casino)/$2/
оказалось, что не работает, так как надо - заменяет строку "play games" на "$2" вместо "games"
пришлось разбивать на три строки
/play (poker|games|casino)/$1/
/win (poker|games|casino)/$1/
/online (poker|games|casino)/$1/

хотя первый вариант компактней.

Добавлено: Сб фев 03, 2007 3:24 pm
Begemot
вот так
/(?:play|win|online) (poker|games|casino)/$1/

Добавлено: Вс фев 04, 2007 1:18 pm
adre
/(?:buy|purchase|cheap) (caca|kaka)/$1/
возвращает в http header-e
Invalid regexp: (?:buy|purchase|cheap) (caca|kaka)
пробовал в перле, работают оба варианта
$s="buy cheap caca";
$s=~s/(?:buy).*?\s(caca)/$1/;
$s=~s/(buy).*?\s(caca)/$2/;
Первый вариант считается расширенным
Perl also defines a consistent extension syntax for features not found in standard tools like awk and lex. The syntax is a pair of parentheses with a question mark as the first thing within the parentheses. The character after the question mark indicates the extension.
ну а второй должен по идее везде работать.

Добавлено: Вс фев 04, 2007 2:52 pm
Begemot
хм, видимо в POSIX такой формат не работает, я позже посмотрю как это сделать там

Добавлено: Вс фев 04, 2007 11:56 pm
Begemot
похоже что "(?:" это расширение из PCRE, в POSIX такого нет :(
перловые регулярки PCRE я к сутре врядли прикручу - библиотека очень тяжелая для таких целей, поэтому нужно ждать пока я доделаю POSIX версию и полностью реализую замену $1 $2 .. $N на значения
Апдейт: это уже сделано в версии 2.8

Добавлено: Пн фев 05, 2007 8:09 am
adre
было бы неплохо, будем ждать апдейт. :-)

Добавлено: Вт апр 10, 2007 9:59 pm
Virtual
Черт. Перекопал весь хелп не один раз - все вроде понятно. НО.
Ситуация такая:

на сутру трафик льется по урлам вида:

http://domain.com/in.cgi?10&pl=11&from=g&play=1

схема - весовая. на урлах стоит мануал фильтр, вида:
pl select и замена:
/11/1234/
/12/1212/
/15/1313/
/16/1515/
урл куда слать трафф имеет вид:
http://domain2.com/script.php?id=$pl

Собсно проблема в чем. Срабатывает замена - только на урле вида http://domain.com/in.cgi?10&pl=16&from=g&play=1
на всех остальных http://domain.com/in.cgi?10&pl=11&from=g&play=1 например - редиректит на default.cgi. т.е. в замене - нормально обрабатывается только(!!) последний вариант (в данном случае если pl=16). все остальное - сразу на дефолт.цги (не прописан урл дефолтовый)..

ума не приложу, где косяк?

Добавлено: Ср апр 11, 2007 11:41 am
Virtual
темные электрические силы...
толи лыжи не едут, толи я...

вчера же, когда не работали эти правила и все шло на дефолт.цги - делаю копирование урлов из одной схемы в другую - скопировались только урлы... стоял фильтр по странам "селект страна." скопировалась только страна.. селект не выставился.. стоял фильтр по уникам - он вообще не скопировался.. %)

сегодня утром все чудесным образом начало работать как и должно было.. ума не приложу, что за аномалии...

Добавлено: Чт апр 12, 2007 7:30 am
Zulu
ставлю в фильтр по параметру например вот такое выражение: \w\d отправляю в него a1 - не фильтрует, а отсылает на дефолтовый урл. где неправильно ? или что то не работает ?

Добавлено: Чт апр 12, 2007 8:26 pm
Begemot
Zulu а где // ?

Добавлено: Пт апр 13, 2007 7:52 am
Zulu
где // ?

где это должно быть ? в правилах регулярок этого нет
регулярка типа: \w\d имеет обычный вид как есть

Добавлено: Пт апр 13, 2007 8:13 am
Begemot
Zulu регулярка имеет начало и конец :)
/ -начало / -конец например
в сутре так

Добавлено: Пт апр 13, 2007 11:47 am
Zulu
хм, это в сутре так, но не в регулярках ;)
правила составления регулярок отличаются от тех которые ты используешь в сутре, поэтому особенности нужно сразу отображать в доке.

этот пример: \w\d первый выбирает все подряд, второй только цифры
если сделать так /\w\d\/ то тоже не работает, задача пропускать только то что нужно в регулярке

Добавлено: Пт апр 13, 2007 2:51 pm
panter
/\w\d\/ .... а так /\w\d/

Добавлено: Пт апр 13, 2007 8:30 pm
Zulu
вот именно так и делал /\w\d/

просто в топике ошибся на один слеш, не работает все равно !