【问题标题】:Using variables that contain special characters in Perl regexes在 Perl 正则表达式中使用包含特殊字符的变量
【发布时间】:2011-06-14 18:56:33
【问题描述】:

我正在尝试在数组中搜索包含 $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);
        }
    }
}

【问题讨论】:

标签: regex perl variables special-characters


【解决方案1】:

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

$lookfor2 = quotemeta $inbucket[0];

或者您可以使用\Q 转义,这在perlre 中进行了讨论。简而言之,它会引用(禁用)模式元字符,直到遇到\E

if ( $var =~ /\Q$lookfor2/i ) {

【讨论】:

  • 一趟显而易见的旅程:\Q ..... \E 不会逃避符号($ 或 @);变量插值发生在解析的早期阶段。
【解决方案2】:

我想你正在寻找 $var =~ /\Q$lookfor2/i

perl faq

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多