我想将一个文件中的字符串与另一个文件进行比较。但是另一个文件可能包含一些元素,该元素可以在任何地方出现,也可以多次出现。
注意:这些标签需要保留在最终输出中。
例如: 我想比较单词'scripting'.. tag表示要从str2匹配的单词。
$str1 = “perl is an <match>scripting</match> language”;
$str2 = “perl is an s<?..?>cr<?..?>ipti<?..?>ng langu<?..?>age”;
需要输出:
perl is an <match>s<?..?>cr<?..?>ipti<?..?>ng</match> langu<?..?>age
我在每个角色后添加模式:
$str1 =~ {(.)}
{
‘$&(?:(?:<?...?>|\n)+)?’
}esgi;
这些适用于少数情况,但很少有人继续运行。请建议。
答案 0 :(得分:0)
(?:(?:<?...?>|\n)+)?
与(?:<?...?>|\n)*
相同
您也不想在每个字符后添加模式;就在$ str1匹配部分的字符之间。因此在第一个字符之前没有模式,在最后一个字符之后没有模式否则,替换语句将围绕这些标记,并且您希望它们围绕单词的正面和背面。我的猜测是,如果你在所有$ str1上运行第一个替换命令,你可能会得到一个相当大的字符串。
另请参阅我对相关问题here