#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
my @substringarray = ('12347', '12357', '123467', '123488');
my $fullstring = '123477777777';
# Make sure to escape any characters in the strings that are special in REs
my $re = join '|', map quotemeta, @substringarray;
if ($fullstring =~ /$re/) {
say "Found a match: $&";
} else {
say 'No matches found.'
}
#!/usr/bin/env perl
use warnings;
use strict;
use feature qw/say/;
use Algorithm::AhoCorasick::XS;
my @substringarray = ('12347', '12357', '123467', '123488');
my $fullstring = '123477777777';
my $ac = Algorithm::AhoCorasick::XS->new(\@substringarray);
if (my $match = $ac->first_match($fullstring)) {
say "Found a match: $match";
} else {
say 'No matches found.'
}
3条答案
按热度按时间hkmswyz61#
你做错了--你的完整字符串不会出现在任何一个较短的子串中,是吗?
一种方法是将子字符串列表转换为匹配其中任何一个子字符串的正则表达式,并针对该正则表达式测试整个字符串:
另一种方法,如果你要根据许多不同的输入来匹配子字符串,或者想找到所有的匹配项,那就是使用
Algorithm::AhoCorasick::XS
module,它提供了非常高效的同时搜索多个子字符串的功能:9cbw7uwe2#
你把变量弄反了!
您正在检查子字符串是否以$fullstring开头。
您希望检查$fullstring是否以子字符串开头。
这只是交换两个变量的问题。
irlmq6kh3#
短距离,TMTOWTDI:
输出