2011-06-14 103 views
4

我试图在数组中搜索包含$ inbucket [0]的行。我的一些$ inbucket [0]值包含特殊字符。这个脚本完全符合我的要求,直到我遇到特殊字符。在Perl正则表达式中使用包含特殊字符的变量

我希望查询不区分大小写,匹配字符串$ 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); 
     } 
    } 
} 
+0

的可能重复[如何处理在一个Perl的正则表达式的特殊字符?(http://stackoverflow.com/questions/ 576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim 2011-06-14 19:39:07

回答

8

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

$lookfor2 = quotemeta $inbucket[0]; 

或者你可以使用\Q逃逸,这是在perlre讨论。简而言之,它会引用(禁用)模式元字符,直到遇到\E

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

显而易见的一次旅行:\ Q ..... \ E不会转义sigils($或@);变量插值发生在解析的较早阶段。 – DavidO 2011-06-14 21:27:24

+0

工作。谢谢! – McLuvin 2011-06-15 22:46:55

2

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

perl faq

+0

也是这个问题http://stackoverflow.com/q/576435/364306 – Alftheo 2011-06-14 19:03:38

相关问题