使用Perl提取所有可能的子字符串

使用Perl提取所有可能的子字符串,perl,substring,Perl,Substring,我想要输出数组作为 $str="abcde" 即从左向右移动,所有不同长度的所有可能组合 此外,还提供了删除重复元素的附加功能,如 a,b,c,d,e,ab,bc,cd,de,abc,bcd,cde,abcd,bcde,abcde. 数组中可能有许多重复项 这就是我尝试过的 $str="abcdd" for($j=1;$j这是一个非常简单的问题。这个程序在一行中解决了它,尽管双循环可能更清晰 for ($j=1;$j<=$n;$j++) { my @tmp = unpack("

我想要输出数组作为

$str="abcde"
即从左向右移动,所有不同长度的所有可能组合

此外,还提供了删除重复元素的附加功能,如

a,b,c,d,e,ab,bc,cd,de,abc,bcd,cde,abcd,bcde,abcde.
数组中可能有许多重复项

这就是我尝试过的

$str="abcdd"

for($j=1;$j这是一个非常简单的问题。这个程序在一行中解决了它,尽管双循环可能更清晰

for ($j=1;$j<=$n;$j++) {
   my @tmp = unpack("(A$j)*", $seq);
   print "@tmp\n";
} 
输出

use strict;
use warnings;
use 5.010;

my $str = 'abcde';

my @list;

push @list, $str =~ /(?=(.{$_}))/g for 1 .. length $str;

say join ',', @list;

这是一个非常简单的问题。这个程序在一行中解决它,尽管双循环可能更清晰

for ($j=1;$j<=$n;$j++) {
   my @tmp = unpack("(A$j)*", $seq);
   print "@tmp\n";
} 
输出

use strict;
use warnings;
use 5.010;

my $str = 'abcde';

my @list;

push @list, $str =~ /(?=(.{$_}))/g for 1 .. length $str;

say join ',', @list;

解决这个问题的唯一诀窍是,要找到重叠的正则表达式匹配项,需要使用

如果只需要唯一的子字符串,则可以读取或使用

产出:

use strict;
use warnings;

use List::MoreUtils qw(uniq);

for my $string (qw(abcde abcdd)) {
    my @list = uniq map { $string =~ /(?=(.{$_}))/g } ( 1 .. length $string );
    print "$string - ", join( ',', @list ), "\n";
}

解决这个问题的唯一诀窍是,要找到重叠的正则表达式匹配项,需要使用

如果只需要唯一的子字符串,则可以读取或使用

产出:

use strict;
use warnings;

use List::MoreUtils qw(uniq);

for my $string (qw(abcde abcdd)) {
    my @list = uniq map { $string =~ /(?=(.{$_}))/g } ( 1 .. length $string );
    print "$string - ", join( ',', @list ), "\n";
}

向我们展示您为($j=1;$js)尝试过的内容向我们展示您为($j=1;$j)尝试过的内容如何避免重复,如字符串aacde,我不希望a,a在@list中出现两次如何避免重复,如字符串aacde,我不希望a,a在@list中出现两次