开发者

Perl/regex to remove first 3 lines and last 3 lines of a string

I was looking to build a regex statement to always remove the first 3 lines of the string, and last 3 lines of the string (the middle part could be any n number of lines content). Any clean regex way to acheive this output? (i.e. always strip our first 3 lines and last 3 lines of the string - and preserve the middle part, which co开发者_如何学JAVAuld be a variable # of lines)

Thanks.

e.g.

Input String:

"
1
2
3
<1...n # of lines content>
4
5
6
"

To desired output string:

"<1..n # of lines content>"


The previously given solutions are really complex! All one needs is

s/^(?:.*\n){1,3}//;
s/(?:.*\n){1,3}\z//;

If you want to accept a lack of trailing newline at the end, you can use

s/\n?\z/\n/;
s/^(?:.*\n){1,3}//;
s/(?:.*\n){1,3}\z//;

or

s/^(?:.*\n){1,3}//;
s/(?:.*\n){0,2}.*\n?\z//;


This should do the trick. You may need to replace "\n" with "\r\n" depending on the newline format of your input string. This will work regardless if the last line is terminated with newline or not.

$input = '1
2
3
a
b
c
d
e
4
5
6';

$input =~ /^(?:.*\n){3} ((?:.*\n)*) (?:.*\n){2}(?:.+\n?|\n)$/x;

$output = $1;

print $output

Output:

a
b
c
d
e


for($teststring)
{
    s/<.*?>//g;
    $teststring =~ s%^(.*[\n\r]+){3}([.\n\r]).([\n\r]+){3}$%$2%;
    print "Outputstring" . "\n" . $teststring . "\n";
}

You need to test if it's under 6 lines, etc.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜