Perl正则表达式取代?

djs*_*rtz -1 regex perl

为什么这样做:

$my_str=~s/://g;
Run Code Online (Sandbox Code Playgroud)

但这不是:

$my_str=~s/:://g;
Run Code Online (Sandbox Code Playgroud)

我有一个看起来像这样的字符串:::this:is:my:string我需要删除::但不要触摸:.

Ken*_*mon 12

对我来说很好:

$ echo "::this:is:my:string" | perl -ne "s/:://g; print;"
this:is:my:string
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 5

您确定您的代码中没有任何拼写错误吗?而这种替代实际上是问题所在?以下程序对我有用:

my $var = '::a:b:c::';
print "$var\n";
$var =~ s/:://g;
print "$var\n";
Run Code Online (Sandbox Code Playgroud)

输出:

$ perl test.pl
::a:b:c::
a:b:c
$ 
Run Code Online (Sandbox Code Playgroud)

编辑添加几个建议:

  1. 在替换前后立即打印变量。
  2. 没有立即解决手头的问题,但如果您只需要删除字符串开头的 ::,您可能需要在正则表达式中添加一个 ^ 以表明这一点。