The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите с регексами"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Помогите с регексами"  
Сообщение от Dr. Nebula email on 31-Авг-05, 18:12 
Пытаюсь нормально настроить squidguard.cgi

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

строка:
clientaddr=192.168.16.1+clientname=+clientident=login+srcclass=sample-clients+targetclass=porn+url=http://www.sex.ru/

Код для парсинга
  if (defined($query)) {
    while ($query =~ /^\&?([^\&=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\&?([^\&=]+)=([^\&=]*)(.*)/) {
      my $key = $1;
      my $value = $2;
      $value = %word->{"unknown"}->{$lang} unless(defined($value) && $value && $value ne "unknown");
      $query = $3;
      if ($key =~ /^(clientaddr|clientident|clientuser|clientgroup|targetgroup|url)$/) {
        eval "\$$key = \$value";
      }
      if ($query =~ /^url=(.*)/) {
        $url = $1;
        last;
      }
    }
  }

Если убрать в выражении кавычки - получим что все кроме урла забьется в clientaddr. А иначе - вобще не парсит толком

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите с регексами"  
Сообщение от ihor on 31-Авг-05, 20:51 
то, что сразу бросается в глаза:
скрипт ожидает в качестве разделителя '&' а в указанной строке используется '+'.
т.о. образом нужно заменить

$query =~ /^\&?([^\&=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\&?([^\&=]+)=([^\&=]*)(.*)/

на

$query =~ /^\+?([^\+=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\+?([^\+=]+)=([^\+=]*)(.*)/

но честно говоря, криво это как-то всё, может где-то ещё что вылезет :(

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Помогите с регексами"  
Сообщение от гость on 18-Июн-08, 07:36 
>[оверквотинг удален]
>т.о. образом нужно заменить
>
>$query =~ /^\&?([^\&=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\&?([^\&=]+)=([^\&=]*)(.*)/
>
>на
>
>$query =~ /^\+?([^\+=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\+?([^\+=]+)=([^\+=]*)(.*)/
>
>но честно говоря, криво это как-то всё, может где-то ещё что вылезет
>:(

Поменять надо + на & и все будет ок

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру