Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在Perl中找到正则表达式匹配的_all_位置?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我可以从 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');

大佬总结

以上是大佬教程为你收集整理的如何在Perl中找到正则表达式匹配的_all_位置?全部内容,希望文章能够帮你解决如何在Perl中找到正则表达式匹配的_all_位置?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: