2
如何比较两个不相等的模式,并获得位置 以下比较两个字符串:使用Perl的正则表达式
拍拍1:<start>\d+.\d+/\w+\_\w+<end>
拍2:<start>\d+.pe/rl/\w+vivek\w+<end>
我想输出
<starttag>\d+.<NOT>pe/rl</NOT>/\w+<NOT>vivek</NOT>\w+<endtag>
感谢您的帮助提前。
如何比较两个不相等的模式,并获得位置 以下比较两个字符串:使用Perl的正则表达式
拍拍1:<start>\d+.\d+/\w+\_\w+<end>
拍2:<start>\d+.pe/rl/\w+vivek\w+<end>
我想输出
<starttag>\d+.<NOT>pe/rl</NOT>/\w+<NOT>vivek</NOT>\w+<endtag>
感谢您的帮助提前。
这听起来像你想要输出具有两种模式的所有东西,再加上,在NOT标签中,任何刚好在第二种模式中的东西?您的示例与此略有不同(例如,starttag
而不是start
,<startvivek>
而不是<start>vivek
)。不过,假设我是正确的:
use strict;
use warnings;
use Algorithm::Diff;
my $one = '<start>\d+.\d+/\w+\_\w+<end>';
my $two = '<start>\d+.pe/rl/\w+vivek\w+<end>';
my $diff = Algorithm::Diff->new([ split //, $one ], [ split //, $two ]);
my $combined = '';
while ($diff->Next()) {
if ($diff->Same()) {
$combined .= join '', $diff->Same();
}
elsif ($diff->Items(2)) {
$combined .= join '', '<NOT>', $diff->Items(2), '</NOT>';
}
}
print "$combined\n";
此输出:
<start>\d+.<NOT>pe</NOT>/<NOT>rl/</NOT>\w+<NOT>vivek</NOT>\w+<end>
,因为它选择考虑/第一模式相匹配的第一/第二模式,而不是第二个/。
你想比较正则表达式,而不是使用正则表达式吗?看起来你要求RE之间的Levenshtein距离。看看那个。 – Barmar
为什么原始模式中的''变成了结果中的''? –
Barmar
同时考虑作为一个字符串刚插入“ ”的标签不匹配,如果发现....就像任何工具比较突出的区别...所需的输出为“ \ d +。 PE/RL /\ w + 维韦克 \ w + “ –
vivek