Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于多行文件的perl正则表达式_Regex_Perl - Fatal编程技术网

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 = '';      
  }
}