正则表达式 – 如何只保留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;

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...