Страница 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/
просто в топике ошибся на один слеш, не работает все равно !