我有字符串考虑
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";
}
您是否建议任何其他方法或模块来简化它?我不知道会插入什么样的数据。
最佳答案
不确定这是否是您需要的,但是怎么样
@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) 之类的字符也不应该受到伤害。我不明白为什么它们会在任何时候被插入。
关于regex - 数据中意外插入的全词匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21401964/