Regex 在Perl正则表达式中打印模式匹配行

Regex 在Perl正则表达式中打印模式匹配行,regex,perl,Regex,Perl,我正在使用这样的正则表达式在多行输入中查找关键字 if($input =~ /line/mi) { # further processing } this is multi line text to be matched using perl 输入变量中的数据可以是这样的 if($input =~ /line/mi) { # further processing } this is multi line text to be matched using perl 代码正常

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

if($input =~ /line/mi)
{
    # further processing
}
this is
multi line text
to be matched
using perl
输入变量中的数据可以是这样的

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
严格使用;
使用警告;
我的$data=你试过他的吗?
这对我有用$1表示捕获
假设其中一行中只有一个匹配项。如果多行中有匹配项,则仅捕获第一行

if($var=~/(.*line.*)/)
{
print $1
}
如果要捕获包含字符串行的所有行,请使用以下命令:

my @a;
push @a,$var=~m/(.*line.*)/g;
print "@a";

my@match=grep/line/mi,split/\n/,$input
也许?尽管
/m
修饰符在该正则表达式中完全没有用处。您应该删除在此处无效的
/m
,由于没有
^
$
的实例。如果我将参数传递给我的perl脚本,该怎么办?在这种情况下,这会正常工作吗?您传递的参数是什么?别介意,我混淆了shell脚本和perl的参数语法。由于$1表示shell脚本的第一个参数,因此我将其与perl混合使用,并认为这将导致打印参数值而不是正则表达式输出:-)