为什么这项工作:Perl正则表达式替换?
$my_str=~s/://g;
但这并不:
$my_str=~s/:://g;
我有一个字符串,它看起来是这样的:::this:is:my:string
,我需要删除::
,但不触及:
。
为什么这项工作:Perl正则表达式替换?
$my_str=~s/://g;
但这并不:
$my_str=~s/:://g;
我有一个字符串,它看起来是这样的:::this:is:my:string
,我需要删除::
,但不触及:
。
正常工作对我来说:
$ echo "::this:is:my:string" | perl -ne "s/:://g; print;"
this:is:my:string
你确定你没有在你的代码拼写错误?而这种替代实际上是问题所在?下面的程序为我工作:
my $var = '::a:b:c::';
print "$var\n";
$var =~ s/:://g;
print "$var\n";
输出:
$ perl test.pl
::a:b:c::
a:b:c
$
编辑,添加一些建议。
有两件事我能想到的,会导致$my_str =~ s/:://g;
失败:
$my_str
不包含你说什么它包含。pos($my_str)
已设定。为了确保$my_str
包含你所想象的那样,你可以使用Data::Dumper,但要确保使用Dumper
前做$Data::Dumper::Useqq = 1;
。
但首先,确保你不会做这样的事情
if ($my_str =~ /.../g) {
...
$my_str =~ s/:://g;
...
}
if ($my_str =~ /.../g)
是一个常见的错误,它可能会导致这个问题。 (我不知道为什么,因为它在概念上甚至没有意义。)如果是这样,在if
条件中摆脱g
。
当你尝试时会发生什么? –
你一个接一个地在做什么? – Arunmu
它适合我。至少它看起来像*“this:is:my:string”的字符串。我不知道它会用一个看起来像“类似”的字符串来做什么。如果你想真正的答案,显示真实的代码。 –