我有字符串考虑
my $string = 'String need to be evaluated';
在$string
我正在搜索评估或任何其他字词。
问题是他们可能会在字符串中插入一些标签
例如。 Str<data>ing need to be eval<data>ua<data>ted
这是出乎意料的。
在这种情况下,我如何搜索单词?
这是我试过的代码:
my $string = 'Text to be evaluated';
my $string2 = "Te<data>xt need to be eval<data2>ua<data>ted";
# patten to match
$pattern = "evaluated";
@b = split('',$pattern);
for my $i(@b){
$i="$i"."\(?:<data>\)?";
print "$i#\n";
}
$pattern = join('',@b);
print "\n$pattern\n";
if ($string2 =~ /$pattern/){
print "$pattern found\n";
}
您是否建议使用其他任何方法或模块来轻松实现?我不知道会插入什么样的数据。
答案 0 :(得分:1)
不确定这是否是您需要的,但
是怎样的@b = split('',$pattern);
for my $i(@b){
$i=$i.".*";
print "$i \n";
}
$pattern = join('',@b);
只要模式的字符仍然存在并且顺序正确,那么它应该匹配任何具有该模式的字符串,然后才能进行随机插入。
它确实在字符串evaluated
中找到了esouhgvw8vwrg355#*asrgl/\u[\w]atet(45)<data>efdvd
,它的噪音很大。但是,当然,如果无法区分插入和原始字符串,您将得到“假”积极的。例如,如果字符串曾经是evaluted
并且它变成类似evalu<hereisyourmissinga>ted
的字符串,那么您将获得积极的信息。当然,如果你知道插入总是在标签中而文本不是,那么用户回答会更加安全。
只要你单引号输入字符串,像[\ w](45)等字符也不应该受到伤害。我无法理解为什么他们会在任何时候进行插值。
答案 1 :(得分:0)
当然,您可以使用regexp来完成这项工作:
foreach my $s ($string,$string2){
my $cs= $s;
### canonize
$cs =~ s!<[^>]*>!!gs;
### match
if ($cs =~ m!$pattern!i){
print "Found $pattern in $s!\n";
}
}