我正在使用像这样的正则表达式在多行输入中寻找关键字
if($input =~ /line/mi)
{
# further processing
}
输入变量中的数据可能是这样的,
this is
multi line text
to be matched
using perl
代码正常运行并与关键字行匹配。但是,我还想获得匹配模式的行 - “多行文本” - 并将其存储到变量中以供进一步处理。我该怎么做?
感谢您的帮助。
答案 0 :(得分:2)
你可以将这些行插入一个数组,然后它也将作为你的条件:
my @match = grep /line/mi, split /\n/, $input;
if (@match) {
# ... processing
}
答案 1 :(得分:0)
TLP的答案更好,但你可以做到:
if ($input =~ /([^\n]+line[^\n]+)/i) {
$line = $1;
}
答案 2 :(得分:0)
我会查看匹配是否在multiline-String中,如果匹配,将其拆分为行,然后查找正确的索引号(从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";
}
}
}
答案 3 :(得分:0)
(
和)
内的正则表达式捕获
如果其中一行中只有一个匹配。如果多行匹配,则只捕获第一个匹配。
if($var=~/(.*line.*)/)
{
print $1
}
如果要捕获具有字符串行的所有行,请使用以下内容:
my @a;
push @a,$var=~m/(.*line.*)/g;
print "@a";