正则表达式 – 如何只保留Perl标量中的前五行?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何只保留Perl标量中的前五行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从任何类型的标量,我可以使用什么正则表达式来匹配它的前五行并丢弃其余的?

解决方法

奇怪的请求,但这应该这样做:

#!/usr/bin/perl

use strict;
use warnings;

my $s = join '',map { "$_\n" } 1 .. 9;

my ($first) = $s =~ /^((?:.*\n){0,5})/;
my ($last) = $s =~ /((?:.*\n){0,5})$/;


print "first:\n${first}last:\n$last";

一个更常见的解决方案是这样的:

#!/usr/bn/perl

use strict;
use warnings;

#fake a file for the example    
my $s = join '',map { "$_\n" } 1 .. 9;    
open my $fh,"<",\$s
    or die "could not open in memory file: $!";

my @first;
while (my $line = <$fh>) {
    push @first,$line;
    last if $. == 5;
}

#rewind the file just in case the file has fewer than 10 lines
seek $fh,0;

my @last;
while (my $line = <$fh>) {
    push @last,$line;
    #remove the earliest line if we have to many
    shift @last if @last == 6;
}

print "first:\n",@first,"last:\n",@last;

猜你在找的正则表达式相关文章