我很喜欢在perl中捕获多个具有明确匹配的单词,例如:
$string="dasd 341312 ddas 42 fsd 5345";
@numbers=$string=~/(\d+)/g;
这会在我的字符串中返回一个数字数组。
我有这种形式的数据:
random
text
START=somenumber
lines
of
text
here
START=someothernumber
other
text
here
START=thirdnumber
more
text
...
如何捕获以START=
开头并继续(多线)直到下一个START=
(没有它)的所有数据块的数组。
所以例如:
$array[1] = " START=someothernumber
other
text
here"
答案 0 :(得分:0)
也许以下内容会有所帮助:
use strict;
use warnings;
use Data::Dumper;
my $data = do { local $/; <DATA> };
my @array = $data =~ /(START=.+?)(?=START=|\z)/gs;
print Dumper \@array;
__DATA__
random
text
START=somenumber
lines
of
text
here
START=someothernumber
other
text
here
START=thirdnumber
more
text
输出:
$VAR1 = [
'START=somenumber
lines
of
text
here
',
'START=someothernumber
other
text
here
',
'START=thirdnumber
more
text
'
];
答案 1 :(得分:0)
有一种简单的方法可以做到这一点。打开多行和全局替换,然后记住你必须处理新行(这是解开它的关键)。这将解决您的问题:
while ($string =~ /^.*?START=([\w\s\n]*$)/mg) {
print $1,"\n";
}