perl regex在多行上

时间:2017-08-03 09:33:55

标签: regex perl

我一生中从未做过perl和一些正则表达式。但我需要调试一个读取可能在多行上的函数引用的perl文件。 的确,我得到了这种类型的正则表达式:

my @m = ($content =~ /.*\s*function\s*\((\w+)\s*\,\s*(\w+)\s*\)\;.*/ig)

其中$content是我的多行字符串(实际上是文件内容)。但我不明白为什么我只匹配这样的模式

function(param1,param2);

如果逗号后面有换行符,我就无法匹配。以下功能无法识别。

function(param1,
          param2);

我的代码是这样的:

open (FILE, "myfile") or die "Trouble opening the file";
    my $content; 
    local $/;
    $content=<FILE>;
    my @m;
    @m = ($content =~ /\s*function\s*\((\w+)\s*,\s*(\w+)\s*\)\;/gi);
    foreach (@m) {
       print "$_\n";
    }
对不起我的英语很差。

1 个答案:

答案 0 :(得分:0)

如评论中所述,删除.*,您也可以删除不必要的转义:

use Modern::Perl;
use Data::Dumper;

my $content = <<EOD;
function(param11,param12);
function(param21,
          param22);
function
(param31 
,
param32
);
EOD
my @m = ($content =~ /function\s*\((\w+)\s*,\s*(\w+)\s*\);/ig);
say Dumper\@m;

<强>输出:

$VAR1 = [
          'param11',
          'param12',
          'param21',
          'param22',
          'param31',
          'param32'
        ];