使用RegEx Perl删除字符

时间:2014-03-14 13:47:56

标签: regex perl

我试图在Perl中使用正则表达式删除字符。在vim上显示:set list后,带有格式的字符如下所示:

R$
$
e$
a$
$
di$
n$
U$

这种替换有效,但对我的目的来说太宽泛了:

$text =~ s/\w{1,2}//g;

我想做的替换是:

$text =~ s/\w{1,2}$//g;

但是,这不会删除以下任何字符。我很困惑为什么会这样。我想知道这是否与可能的Unicode字符有关;如果是这样,我如何查看和删除它们?

2 个答案:

答案 0 :(得分:2)

$是正则表达式中的锚字符,表示字符串或行的结尾(类似于\Z)。您需要使用$

转义\
$text =~ s/\w{1,2}\$//g;

在您的输入中,我看到您也只删除$个字符。在这种情况下,您必须生成\w{0,2},表示任何带有下划线(_)的字母数字,长度为0到2。

答案 1 :(得分:1)

这里的问题是您需要使用m修饰符将正则表达式视为多行。 Here是文档。

$text =~ s/\w{1,2}$//mg;

以下是我使用:set list

从vim复制并粘贴的示例
#!/bin/perl$
use strict;$
use warnings;$
$
my $text = <<EOD;$
R$
$
e$
a$
$
di$
n$
U$
EOD$
$
$text =~ s/\w{1,2}$//gm;$
$
print $text;$

输出是一堆空行。