regex - 数据中意外插入的全词匹配

标签 regex perl pattern-matching

我有字符串考虑

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/

相关文章:

regex - 模式匹配并使用 sed 在文本文件中的行尾或行首添加行

python - 给定以下约束,如何将一些数字连接到另一个数字?

c - 如何在应用程序包内的 C 语言中查找当前目录 [macOS]

perl - 如何使用 linux 或 perl 从一行中获取唯一的列值?

windows - 我如何让 Perl 理解导航到路径中有空格的目录?

regex - Emacs:查找名称中包含这个或那个的所有命令

erlang - 在 Erlang (Elixir) 中对作为元组的记录进行模式匹配

php - 需要更快的 PHP/MySQL 搜索算法来进行高度复杂的计算

python - 子匹配的位置

python - 如何使用 python 正则表达式从日志文件中查找所有回溯?