Использование переменных, которые содержат специальные символы в регулярных выражениях Perl - PullRequest
4 голосов
/ 14 июня 2011

Я пытаюсь найти в массиве строки, содержащие $ inbucket [0].Некоторые из моих значений $ inbucket [0] включают специальные символы.Этот скрипт выполняет именно то, что мне нужно, пока я не нажму на специальный символ.

Я хочу, чтобы запрос был чувствительным к регистру, соответствовал любой части строки $ var и обрабатывал специальные символы буквально, как если быони не были особенными.Есть идеи?

Спасибо!

sub loopthru() {
    warn "Loopthru begun on $inbucket[0]\n";
    foreach $c (@chat) {
        $var = $c->msg;
        $lookfor2 = $inbucket[0];
        if ( $var =~ /$lookfor2/i ) {
            ($to,$from) = split('-',$var);
            $from =~ s/\.$//;
            print MYFILE "$to\t$from\n";
            &fillbucket($to);
            &fillbucket($from);
        }
    }
}

Ответы [ 2 ]

8 голосов
/ 14 июня 2011

Вы можете использовать quotemeta , которая возвращает значение своего аргумента со всеми не-"словесными" знаками обратной косой черты.

$lookfor2 = quotemeta $inbucket[0];

Или вы можете использовать \Q escapeчто обсуждается в perlre .Короче говоря, он будет заключать в кавычки (отключать) метасимволы шаблона, пока не встретится \E.

if ( $var =~ /\Q$lookfor2/i ) {
2 голосов
/ 14 июня 2011

Я думаю, что вы ищете $var =~ /\Q$lookfor2/i

perl faq

...