0

我有以下一组字符串:

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

我需要使用以下内容即时修改正则表达式:

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

不幸的是,这段代码似乎不起作用,因为#do something没有发生。

我不太确定它是正确的代码。有可能perl吗?

4

3 回答 3

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
   }
}
于 2013-04-30T12:04:57.240 回答
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";
     }
}
于 2013-04-30T12:07:22.947 回答
0

Perl 中的数组语法只是

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

或使用 arrayrefs:

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

qr您可以使用运算符引用正则表达式对象

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

这可能更可取(避免在极端情况下双重转义)。

于 2013-04-30T12:06:29.140 回答