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.
精彩评论