在perl中的字符串中添加正则表达式模式

时间:2014-03-03 05:39:41

标签: regex perl

我想将一个文件中的字符串与另一个文件进行比较。但是另一个文件可能包含一些元素,该元素可以在任何地方出现,也可以多次出现。

注意:这些标签需要保留在最终输出中。

例如: 我想比较单词'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;

这些适用于少数情况,但很少有人继续运行。请建议。

1 个答案:

答案 0 :(得分:0)

(?:(?:<?...?>|\n)+)?(?:<?...?>|\n)*相同
您也不想在每个字符后添加模式;就在$ str1匹配部分的字符之间。因此在第一个字符之前没有模式,在最后一个字符之后没有模式否则,替换语句将围绕这些标记,并且您希望它们围绕单词的正面和背面。我的猜测是,如果你在所有$ str1上运行第一个替换命令,你可能会得到一个相当大的字符串。
另请参阅我对相关问题here

的回答