我正在使用这样的正则表达式在多行输入中寻找关键字,
if($input =~ /line/mi)
{
# further processing
}
输入变量中的数据可能是这样的,
this is
multi line text
to be matched
using perl
该代码有效并正确匹配关键字行。但是,我还想获取模式匹配的行 - “多行文本” - 并将其存储到变量中以供进一步处理。我该怎么做?
谢谢您的帮助。
您可以将这些行放入一个数组中,然后该数组也将用作您的条件:
my @match = grep /line/mi, split /\n/, $input;
if (@match) {
# ... processing
}
TLP 的答案更好,但你可以这样做:
if ($input =~ /([^\n]+line[^\n]+)/i) {
$line = $1;
}
我会查看匹配项是否在多行字符串中,如果是,请将其拆分为行,然后查找正确的索引号(从 0 开始!):
#!/usr/bin/perl
use strict;
use warnings;
my $data=<<END;
this is line
multi line text
to be matched
using perl
END
if ($data =~ /line/mi){
my @lines = split(/\r?\n/,$data);
for (0..$#lines){
if ($lines[$_] =~ /line/){
print "LineNr of Match: " . $_ . "\n";
}
}
}
你试过他的吗?这对我有用。$1 代表捕获里面的正则表达式(
, )
如果其中一行只有一个匹配。如果多行有匹配,那么只会捕获第一个。
if($var=~/(.*line.*)/)
{
print $1
}
如果要捕获所有具有字符串行的行,请使用以下命令:
my @a;
push @a,$var=~m/(.*line.*)/g;
print "@a";