使用Perl正则表达式中包含特殊字符的变量

时间:2011-06-14 18:56:33

标签: regex perl variables special-characters

我正在尝试在数组中搜索包含$ 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 个答案:

答案 0 :(得分:8)

您可以使用quotemeta,它返回其参数的值,并将所有非“单词”字符反斜杠。

$lookfor2 = quotemeta $inbucket[0];

或者您可以使用\Q中讨论的\E转义符。简而言之,它将引用(禁用)模式元字符,直到遇到if ( $var =~ /\Q$lookfor2/i ) {

{{1}}

答案 1 :(得分:2)

我认为你在寻找 $var =~ /\Q$lookfor2/i

perl faq