Perl正则表达式在模式匹配之前全局插入换行符

时间:2012-11-26 14:23:31

标签: regex perl global

我正在努力在匹配字符串之前插入换行符,该字符串由一个句点后跟2或3个字符(字母数字)并以另一个句点结尾。如果可能,这需要是一个作用于整个文件的单个语句。

像(?):

$contents =~ s/\.{2,3}\./\n\.<what goes here?>\./g;

具体来说,我正在分两步处理许多目录记录的文件。 第1步:从文件中删除所有回车符。 第2步:查找.AUTH等文本字符串。和.RE。甚至.856。并使这些中的每一个成为新线的开始。我可以用一系列特定的替代品做到这一点,

$contents=~s/\.RE\./\n\.RE\./g;
$contents=~s/\.AUTH\./\n\.AUTH\./g;
$contents=~s/\.TITL\./\n\.TITL\./g;

但我的理解是,我也可以使用单个语句更有效地执行此操作(使用正则表达式内置变量?)

谢谢,

汤姆

2 个答案:

答案 0 :(得分:1)

要删除所有换行符,请使用

$contents =~ s/\n//g;

要添加所需的换行符,请使用

$contents =~ s/(?=[.][a-z\d]{2,3}[.])/\n/ig;

答案 1 :(得分:-1)

$contents =~ s/(\.\w{2,3}\.)/\n$1/;

使用括号记住匹配的字符串,使用$ 1在替换部分中引用它。