Regex 用于多行文件的perl正则表达式
我有像Regex 用于多行文件的perl正则表达式,regex,perl,Regex,Perl,我有像 CASE: 8 Location: smth Destination: 183, 3921, 2.293e-2, 729, 9 END_CASE 我需要将案例(8)和目标参数的数量添加到变量中。。。如何做到这一点?下面是关于regexp的: my $str = "CASE: 8 Location: smth Destination: 183, 3921, 2.293e-2, 729, 9 END_CASE "; my ($ca
CASE: 8
Location: smth
Destination: 183, 3921, 2.293e-2, 729, 9
END_CASE
我需要将案例(8)和目标参数的数量添加到变量中。。。如何做到这一点?下面是关于regexp的:
my $str = "CASE: 8
Location: smth
Destination: 183, 3921, 2.293e-2, 729, 9
END_CASE
";
my ($case,$dest) = $str= m!\A\s*CASE:\s*(\d+).+?Destination:\s*(.+?)\n!gis;
print "case: $case, dest: $dest\n";
编辑:
如果您想要匹配多行regexp,并且您的文件很小,那么您可以将其删除
如果它更大,那么您可以将其分块处理
咕噜声:
local $/=undef;
open(my $fh,'<',...) or die $!;
my $str = <$fh>;
while ($str= m!\A\s*CASE:\s*(\d+).+?Destination:\s*(.+?)\n!is){
print "case: $1, dest: $2\n";
}
local$/=undf;
打开(my$fh,my%data=map split(/:\s*/,$\ux,2),split(/\n/,$string)
您自己尝试过什么吗?我已经将输入文件放在@mass并使用foreach循环,试图检查它是否与我的regexp匹配,但它不起作用,因为它逐行检查…@Rocker-如果您尝试过,您必须始终将其包含在您的问题中。这将使人们更容易理解您正在尝试的操作,并且更愿意帮忙。我喜欢while(){if(regexp匹配文本){put collect arguments into variables}
my $str;
while( my $line = <$fh>){
if ($line !~ m!END_CASE!){
$str .= $line;
} else {
$str .= $line;
### process $str
my ($case,$dest) = $str= m!\A\s*CASE:\s*(\d+).+?Destination:\s*(.+?)\n!gis;
print "case: $case, dest: $dest\n";
### reset chunk
$str = '';
}
}