爲什麼這項工作: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」的字符串。我不知道它會用一個看起來像「類似」的字符串來做什麼。如果你想真正的答案,顯示真實的代碼。 –