我想使用正则表达式查找perl中出现的新行数。 如何在perl中定义换行符的出现次数。
例如 我有包含
的文字dog
cat
other 23 newlines
puppy
Kitten
我可以使用记事本Find "(dog)((?:.*[\r\n]+){25})(\w.*)"
和replace with "\1 = \3 \2"
进行正则表达式
的修改
重要的是,如何从狗身上找到第25段的内容。 更简单的方法。 如何缩短此查找字符串
(dog)(.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+.*[\r\n]+)(.*)
Perl中特定数量的新行的替代方法是什么?
错误发布在超级用户身上,现在已移到此处。
答案 0 :(得分:2)
您可以在阅读输入时跳过这些行:
while (<>) {
if (/dog/) {
<> for 1 .. 24;
print scalar <>;
}
}
或者,如果整个字符串是输入,则可以使用非捕获组:
my ($puppy) = $string =~ /dog(?:.*\n){25}(.*)/;
print $puppy;
在正则表达式中,点与换行符不匹配(除非使用/s
修饰符)。
答案 1 :(得分:1)
您可以使用tr///
运算符(请参阅perlop)来计算单个字符的出现次数。
#!/usr/bin/perl
use warnings;
use strict;
my $string = 'dog
cat
other 23 newlines
puppy
Kitten';
print $string =~ tr/\n//, "\n";
输出:
4
答案 2 :(得分:0)
这是我想要的答案。
perl -i.bak -pe "BEGIN{undef $/;} s/(dog)(.*[\r\n]+){23}(.*)/$1 = $3/smg" 1.rtf