Perl正则表达式取代?

时间:2011-08-29 15:11:19

标签: regex perl

为什么这样做:

$my_str=~s/://g;

但这不是:

$my_str=~s/:://g;

我的字符串看起来像这样:::this:is:my:string我需要删除::但不要触及:

3 个答案:

答案 0 :(得分:12)

对我来说很好:

$ echo "::this:is:my:string" | perl -ne "s/:://g; print;"
this:is:my:string

答案 1 :(得分:4)

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

my $var = '::a:b:c::';
print "$var\n";
$var =~ s/:://g;
print "$var\n";

输出:

$ perl test.pl
::a:b:c::
a:b:c
$ 

编辑以添加一些建议:

  1. 在替换前后立即打印变量。
  2. 当前没有问题,但如果您只需要删除字符串开头的::,您可能需要在正则表达式中添加^来表示。

答案 2 :(得分:3)

我能想到的两件事会导致$my_str =~ s/:://g;失败:

  1. $my_str不包含您所说的内容。
  2. pos($my_str)已设置。
  3. 为确保$my_str包含您认为的功能,您可以使用Data::Dumper,但请务必在使用$Data::Dumper::Useqq = 1;之前执行Dumper

    但首先,请确保您没有做类似

    的事情
    if ($my_str =~ /.../g) {
       ...
       $my_str =~ s/:://g;
       ...
    }
    

    if ($my_str =~ /.../g)是一个常见错误,它可能会导致此问题。 (我不知道为什么,因为它在概念上甚至没有意义。)如果是这样,请摆脱g条件中的if