Regex Perl正则表达式比较HTML的文本形式

Regex Perl正则表达式比较HTML的文本形式,regex,perl,Regex,Perl,我对Perl非常陌生 前面两个文本是这样比较的: if($arr1[$k1-1] eq $arr2[$k2-1]) 现在,我正在寻找一个Perl正则表达式解决方案来比较两个字符串之间的格式 忽略大小写敏感度 忽略所有标点符号 将忽略所有HTML标记,如、 我还需要的字数是两个文本之间的不同,无论上述情况 在Perl中有什么解决方案吗?看看Text::WordDiff或String::Diff模块,也许Text::Diff也足够了 仅仅通过编码,我想不可能一步到位 如果没有模块,

我对Perl非常陌生

前面两个文本是这样比较的:

        if($arr1[$k1-1] eq $arr2[$k2-1])
现在,我正在寻找一个Perl正则表达式解决方案来比较两个字符串之间的格式

忽略大小写敏感度 忽略所有标点符号 将忽略所有HTML标记,如、 我还需要的字数是两个文本之间的不同,无论上述情况

在Perl中有什么解决方案吗?

看看Text::WordDiff或String::Diff模块,也许Text::Diff也足够了

仅仅通过编码,我想不可能一步到位

如果没有模块,我应该执行以下步骤:

首先删除所有html标记和标点符号,根据您的需要,将它们替换为零或一个空格,它们是否为分词符,然后您可以比较它们或计算差异

1:删除html标记和标点符号:

$string =~ s/<[^>]+?>|[[:punct:] ]/ /igm; #replace with space in this case
然后删除多个空格-如果使用/x-$string=~s/\s+//igm;,则不需要,并将它们与eq或regex$string1=~//is;,进行比较;,使用/x修饰符/x=扩展为空格和注释;这取决于您使用的正则表达式电机

之后,您需要一个函数来消除两个文本中出现的单词,我猜多重存在也会被忽略,并获得剩余数组的计数

您可以找到的代码示例

我希望这有帮助

#subroutine to clean html tags, pontuation and spaces > 2
sub clean {
my ($string) = @_;
$string =~ s/(<.+?>|[^\w\s])//ig;
$string =~ s/[\s]{2,}//ig;
return $string;
}

#clean the strings
my $str1 = clean('<B>, <BR />, <img src="aaaa.png" />, </B> test 123');
my $str2 = clean('<B>,  test 123 <BR />, <im g src="aaaa.png" />, </B>');


#compare two strings
if($str1 eq $str2){
print "equal"
}else{
print "not equal";
}

提到HTML标签让我觉得你需要一个解析器,而不是正则表达式,你想要比较的实际字符串是什么?我还喜欢使用其他任何东西。但我们不得不使用正则表达式。这就是这个问题需要用到的地方。虽然没有例子。