2013-04-30 70 views
0

,我有以下字符串集:在飛的正則表達式修改

my @strings = {"/str1/", "/str2/", "/str3/"}; 

我需要用這樣的修改對飛的正則表達式:

foreach $string (@strings) 
{ 
    if($line =~ $string) 
    { 
     #do something 
    } 
} 

不幸的是,這段代碼沒有按由於#do something沒有發生,似乎不起作用。

我不是很確定它是正確的代碼。完全可以在perl

回答

2

試試這個:

use strict; 
use warnings; 

my @regexprs = (qr/str1/, qr/str2/, qr/str3/); 

my $line = "-- str2 --"; 
foreach my $re (@regexprs) 
{ 
    if($line =~ $re) 
    { 
     print "match: $line $re\n"; 
    } 
} 
3
my @patterns = ("pattern1", "pattern2", "pattern3"); 

for my $pattern (@patterns) { 
    if ($line =~ $pattern) { 
     # $line matches $pattern 
    } 
} 

my @strings = ("string1", "string2", "string3"); 

for my $string (@strings) { 
    if ($line =~ /\Q$string/) { 
     # $line contains $string 
    } 
} 
0

Perl中的數組語法只是

my @array = ($elem1, $elem2, ...); 

或arrayrefs:

my $arrayref = [$elem1, $elem2, ...]; 

你可以引用regex對象與qr操作

my $regex = qr/str1/; 
if ($string =~ $regex) { ... } 

這可能是優選的(避免邊緣情況下的雙重逃逸)。