1

我正在使用这样的正则表达式在多行输入中寻找关键字,

if($input =~ /line/mi)
{
    # further processing
}

输入变量中的数据可能是这样的,

this is
multi line text
to be matched
using perl

该代码有效并正确匹配关键字。但是,我还想获取模式匹配的行 - “多行文本” - 并将其存储到变量中以供进一步处理。我该怎么做?

谢谢您的帮助。

4

4 回答 4

3

您可以将这些行放入一个数组中,然后该数组也将用作您的条件:

my @match = grep /line/mi, split /\n/, $input;
if (@match) {
    # ... processing
}
于 2013-08-12T10:11:11.620 回答
0

TLP 的答案更好,但你可以这样做:

if ($input =~ /([^\n]+line[^\n]+)/i) {
    $line = $1;
}
于 2013-08-12T10:21:23.210 回答
0

我会查看匹配项是否在多行字符串中,如果是,请将其拆分为行,然后查找正确的索引号(从 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";
        }
    }
}
于 2013-08-12T10:24:26.273 回答
0

你试过他的吗?这对我有用。$1 代表捕获里面的正则表达式() 如果其中一行只有一个匹配。如果多行有匹配,那么只会捕获第一个。

if($var=~/(.*line.*)/)
{
print $1
}

如果要捕获所有具有字符串行的行,请使用以下命令:

my @a;
push @a,$var=~m/(.*line.*)/g;
print "@a";
于 2013-08-12T10:31:08.337 回答