我有2个RegExps。如何获得第一个RegExp匹配子字符串的起始位置并开始从该位置找到第二个RegExp匹配?
UPD:例如:
$_ = "
=cut
vffdv
vdfvfd
vdfvfdvfd
=pod
dvfddv
vfdvfdvf
vdfvfdvfd
=end
";
$\ = "\n";
sub get {
my $_ = shift;
/=((\d|\w)+)/i;
return $1;
}
print get($_) while /^=/mg;
打印
cut
cut
cut
但我需要
cut
pod
end
答案 0 :(得分:3)
您发送的$_
在while
循环中没有变化,并且在脚本开始时定义为get()
函数。
您需要捕获内容并发送$1
才能运行。
print get($1) while /^=(.+)/mg;
旁注;大部分时间都比偏置$_
更喜欢命名变量。如果你期望my $_ = ..
全局的动态作用域,那么$_
也会遇到麻烦,而词汇$_
正在破坏它。
答案 1 :(得分:1)
你可以使用这样的东西
$_ = "
=cut
vffdv
vdfvfd
vdfvfdvfd
=pod
dvfddv
vfdvfdvf
vdfvfdvfd
=end
";
my @array = split /\n/ , $_;
for ( @array ){
if( $_ =~ /^=/ ){
print substr( $_ , 1 ) . "\n";
}
}
答案 2 :(得分:0)
这就像我需要的那样。
$_ = "
=cut
vffdv
vdfvfd
vdfvfdvfd
=pod
dvfddv
vfdvfdvf
vdfvfdvfd
=fuck
";
$\ = "\n";
sub get {
my $_ = shift;
my $start = shift;
pos($_) = $start - 1;
/=((\d|\w)+)/ig;
return $1;
}
print get($_,pos $_) while /^=/mg;