我试图在Perl中使用正则表达式删除字符。在vim上显示:set list
后,带有格式的字符如下所示:
R$
$
e$
a$
$
di$
n$
U$
这种替换有效,但对我的目的来说太宽泛了:
$text =~ s/\w{1,2}//g;
我想做的替换是:
$text =~ s/\w{1,2}$//g;
但是,这不会删除以下任何字符。我很困惑为什么会这样。我想知道这是否与可能的Unicode字符有关;如果是这样,我如何查看和删除它们?
答案 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
#!/bin/perl$
use strict;$
use warnings;$
$
my $text = <<EOD;$
R$
$
e$
a$
$
di$
n$
U$
EOD$
$
$text =~ s/\w{1,2}$//gm;$
$
print $text;$
输出是一堆空行。