点击(此处)折叠或打开
- #!/usr/bin/perl
- use strict;
- use warnings;
- my $str1 ="aab12345678";
- my $str2 = "ab1234yb1234567";
- my $str = $str1 . "\n" . $str2;
- my (@substr,@result);
- $str =~ /(.+)(?=.*\n.*\1)(*PRUNE)(?{push @substr,$1})(*F)/;
- @substr = sort { length($b) <=> length($a) } @substr;
- @result = grep { length == length $substr[0] } @substr;
- print "@result\n";
里面有几个注意的:
1.零宽断言,上面已经有介绍了。
2.*PRUNE,这个是find里面的参数用法,在perl的正则里面也可以进行使用。(-prune就像一个判断语句,当发现-prune前面的表达式math时,执行到-prune之后就会输出一个1结果)
3.?{push @substr,$1},这个也要注意,?号不能丢。(现在还不太清楚这个?的用意,等以后了解了再来添加)。
4.(*F)这个也要特别注意,没有它的话,会只循环一次。(至于为什么,我还不是太清楚..需要继续找资料)。
这是一个帖子上看到的解法,感觉很帅,思路很新颖。
以后遇到此类问题,也参考这个思路进行下尝试。