2011-03-25 158 views
4

我有一系列需要在URL字符串列表中匹配的子字符串。子字符串具有特殊字符,如'|','*',' - ','+'等。如果URL字符串包含該子字符串,我需要執行一些操作。但現在讓我們只是說我會在控制檯中打印「TRUE」。匹配具有特殊字符的字符串的Perl正則表達式

我是這樣做的,首先從子串列表中讀取並放入哈希表中。然後,我嘗試對每個URL執行整個列表的簡單正則表達式匹配,直到找到匹配項。代碼是這樣的。

open my $ADS, '<', $ad_file or die "can't open $ad_file"; 

while(<$ADS>) { 
     chomp; 

     $ads_list_hash{$lines} = $_; 
     $lines ++; 
} 

close $ADS; 

open my $IN, '<', $inputfile or die "can't open $inputfile";  
my $first_line = <$IN>; 

while(<$IN>) {  
     chomp;  

     my @hhfile = split /,/;  
     for my $count (0 .. $lines) { 

      if($hhfile[9] =~ /$ads_list_hash{$count}/) { 
       print "$hhfile[9]\t$ads_list_hash{$count}\n"; 

       print "TRUE !\n"; 
       last; 
      } 
     } 

} 

close $IN; 

的問題是,子有很多,這是造成在比賽$hhfile[9] =~ /$ads_list_hash{$count}/錯誤的特殊字符。幾個例子是;

+adverts/ 
.to/ad.php| 
/addyn|*|adtech; 

我得到這樣的行中的錯誤,基本上說「量詞在正則表達式中沒有任何含義」。我是否需要在正則表達式匹配語法中查找某些內容以避免這些?

+1

如果你只是想找到一個字符串,然後一個正則表達式似乎有點矯枉過正...有一個原因[指數](http://perldoc.perl.org/functions/index.html)沒有做你所需要的? – jswolf19 2011-03-25 13:36:16

+0

[我如何處理Perl正則表達式中的特殊字符?](http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim 2011-03-25 14:15:47

回答

13

您需要轉義字符串中的特殊字符。

圍護\Q\E之間的字符串將做的工作:

if($hhfile[9] =~ /\Q$ads_list_hash{$count}\E/) { 
+0

另請參閱'perldoc -f quotemeta'。 – shawnhcorey 2011-03-25 14:00:47