我有以下字符串集:
my @strings = {"/str1/", "/str2/", "/str3/"};
我需要使用以下内容修改正则表达式:
foreach $string (@strings )
{
if($line =~ $string)
{
#do something
}
}
不幸的是,这段代码似乎不起作用,因为#do something
没有发生。
我不确定它是否是正确的代码。有可能在perl
吗?
答案 0 :(得分: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
}
}
答案 1 :(得分: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";
}
}
答案 2 :(得分:0)
Perl中的数组语法只是
my @array = ($elem1, $elem2, ...);
或使用arrayrefs:
my $arrayref = [$elem1, $elem2, ...];
您可以使用qr
运算符
my $regex = qr/str1/;
if ($string =~ $regex) { ... }
这可能是优选的(避免在边缘情况下双重逃逸)。