我一生中从未做过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";
}
对不起我的英语很差。
答案 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'
];