2011-06-14 32 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

相關問題