Страница 1 из 1

PERL Спец символы в регулярке через переменную

Добавлено: 2010-05-09 13:29:21
garrotte
Здравствуйте
Есть небольшой скрипт, для поиска в лог файлах, запускается из строки в виде ./parser.pl pattern, а результат скидывает в отдельный файл, его потом черех www просматривают
выглядит вкратце так, заранее извиняюсь перед знатоками за корявость, не кодер)

Код: Выделить всё

$path="/logs/items/*.log.*";
@a= glob($path);

&conc(@a);

# собственно сам поиск.. то есть если строка совпадает с аргументом переданным для поиска, строка скидывается в массив, который потом пишется в файл
foreach $arg(@ARGV){
    foreach(@all){
               if( /($arg)/g ){
                push(@out,"$_");
           }
    }
    &wfile(@out);
    $#out=-1;
}

# тут спихивает содержимое всех файлов в массив
sub conc(){
    foreach(@a){
           open(F,"$_");
           my @lines= <F>;
           close(F);
           push(@all,@lines);
    }
    return @all;
}

подскажите пожалуйста, как сделать, что-бы в шаблоне поиска, передаваемом через переменную, могли присутствовать спецсимволы.. то есть например там может быть что-нить типа ~^mega_user^~, скрипт неадекватно реагирует на такие предъявы)
есть подозрение что я вообще везде не прав в этом скрипте :)

заранее спасибо

ЗЫ. .с правдником товарищи !:)

Re: PERL Спец символы в регулярке через переменную

Добавлено: 2010-05-09 14:02:03
ProFTP
т.е. это тут

Код: Выделить всё

     if( /($arg)/g ){
?

как вы ставите, и какая ошибка?

Re: PERL Спец символы в регулярке через переменную

Добавлено: 2010-05-09 17:49:35
garrotte
ProFTP
т.е. это тут
да, аргумент с которым скрипт запускается попадает сюда.. ошибки никакой не происходит, но если например в качестве шаблона для поиска задать ~^bla^~,( то есть запустить скрипт как parser.pl "~^bla^~" ), поместив такое-же сочетание в лог-файл, то он ничего не найдет..
если попробовать поискать просто bla, то будет найдена строка содержащая ~^bla^~.

Re: PERL Спец символы в регулярке через переменную

Добавлено: 2010-05-10 9:48:58
thefree

Код: Выделить всё

if( /($arg)/ge){
Экранируем в запосе символы, ~\^bla\^~ ищем так

_http://www.intuit.ru/department/pl/perl/8/1.html

Re: PERL Спец символы в регулярке через переменную

Добавлено: 2010-05-10 13:24:29
garrotte
thefree.. спасибо)
я знаю что нужно экранировать спецсимволы.. просто не догнал как это сделать, когда они передаются через переменную, а не явно в m// прописаны..
в итоге все оказалось банально, даже не подумал о существовании символов \Q\E в голове почему-то не отложились :)
спасибо всем :)