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

McL*_*vin 4 regex variables perl 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

FMc*_*FMc 8

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

$lookfor2 = quotemeta $inbucket[0];
Run Code Online (Sandbox Code Playgroud)

或者你可以使用\Q转义,这在perlre中讨论过.简而言之,它将引用(禁用)模式元字符,直到\E遇到.

if ( $var =~ /\Q$lookfor2/i ) {
Run Code Online (Sandbox Code Playgroud)