【问题标题】:Perl reading in a file and getting a string in between two stringsPerl 读取文件并在两个字符串之间获取一个字符串
【发布时间】:2017-09-13 09:27:43
【问题描述】:

我正在尝试读取文件并收集两个哈希键之间的所有内容。我想访问 $beginString 和 $endString 变量之间的所有内容。我已经尝试了多个正则表达式,但无法让其中一个起作用。

my $beginString = "SEARCH";
my $endString = "TEST";


my $fileContent;
open(my $fileHandler, $inputFile) or die "Could not open file '$inputFile' $!";
{
    local $/;
    $fileContent = <$fileHandler>;
}
close($fileHandler);



if($fileContent =~ /\b$beginString\b(.*?)\b$endString\b/){
    my $result = $1;
    print $result;
}

print Dumper($fileContent); 

【问题讨论】:

  • 如果你想跨越多行,你需要 s修饰符 if($fileContent =~ /\b$beginString\b(.*?)\b$endString\b/s s 允许 `dot' 匹配换行符。
  • 谢谢!但这不是完整的解决方案。它所做的是将所有内容返回到 $endString 但我仍然得到了 $beginString 之前的所有内容。
  • 提示:它被称为“文件句柄”(保存资源的东西),而不是“文件处理程序”(处理文件的东西)。

标签: regex perl


【解决方案1】:

the perl monks' solution 的改编版可能是..

my $beginString = "SEARCH";
my $endString = "TEST";

my $fileContent;
open(my $fileHandler, $inputFile) or die "Could not open file '$inputFile' $!";
while(<$fileHandler>) {
  if(/$beginString/../$endString/) {  $fileContent .= $_ unless(/$beginString/ or /$endString/) }
}
close($fileHandler);
print Dumper($fileContent);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多