如何在Perl中找到正则表达式匹配的_all_位置?
发布时间:2020-12-15 22:07:00 所属栏目:大数据 来源:网络整理
导读:我可以从 this回答,如果我这样做 sub match_all_positions { my ($regex,$string) = @_; my @ret; while ($string =~ /$regex/g) { push @ret,$-[0] } return @ret}print join ',',match_all_positions('0{3}','001100010000'); 我明白了 4,8 我需要做什么来
我可以从
this回答,如果我这样做
sub match_all_positions { my ($regex,$string) = @_; my @ret; while ($string =~ /$regex/g) { push @ret,$-[0] } return @ret } print join ',',match_all_positions('0{3}','001100010000'); 我明白了 4,8 我需要做什么来获得所有匹配的索引,即使重叠,例如上面示例中的位置8和9? 我可以 sub match_all_positions_b { my ($substr,$string) = @_; return unless index($string,$substr) > 0; my @res; my $i = 0; while ($i <= (length($string) - $length)) { $i = index($string,$substr,$i); last if $i < 0; push @res,$i++; } return @res; } print join ',match_all_positions_b('000','001100010000'); 它只是让我匹配一个子字符串,或 sub match_all_positions_c { my ($substr,$string) = @_; my $re = '^' . $substr; my @res; for (0..(length($string) - $length)) { push @res,$_ if substr($string,$_) =~ /$re/; } return @res; } print join ',match_all_positions_c('0{3}','001100010000'); 这是慢两倍. 是否有办法获得所有比赛,即使它们重叠?或者我应该采取速度损失,因为它是使用正则表达式匹配固有的? 解决方法
你需要更新你的正则表达式
zero-width look-ahead匹配.
尝试像这样调用你的函数: print join ',match_all_positions('(?=0{3})','001100010000'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |