2011-12-07 319 views
0

我有以下字符串./test ,我想用test 所以來取代它,我寫在Perl如下:然而 my $t =~ s/^.//; ,與/test取代./test 任何人都可以請建議我該如何解決所以我也擺脫了/。謝謝!替換字符串

回答

6
my $t =~ s/^\.\///; 

您需要轉義點和斜線。

替換爲s/match/replace/。如果你擦除,它是s/match//。你想匹配「以點和斜線開始」,這就是^\.\/

2

你必須在點和正斜線之前使用反斜槓:s /\.////; 反斜槓用於寫符號,否則在正則表達式中會有不同的含義。

2

您需要編寫my $t =~ s/^\.\///;(請注意,爲了匹配文字週期而不是任何字符,需要跳過該週期)。如果這太多斜槓,您也可以更改分隔符,而不是寫入,例如my $t =~ s:^\./::;

4

點不符合你的期望 - 而不是匹配一個點字符,它匹配任何字符,因爲它的特殊處理。要匹配點和斜槓,你可以重寫你的表達如下:

my $t =~ s|^\./||; 

請注意,您可以自由使用不同的字符作爲分隔符,爲了不與裏面的任何這樣的字符混淆正則表達式。

2
$t=q(./test);$t=~s{^\./}{};print $t; 

如果您希望它匹配點,則需要轉義點。否則它匹配任何字符。你可以選擇其他的分隔符---最好是在處理正斜槓時,以免你得到傾斜的牙籤外觀,否則你也需要避開這些分隔符。

2

請注意,您問題中的點符合任何字符,而不是文字'。'。

my $t = './test'; 
$t =~ s{\./}{}; 
4

如果你想擺脫./那麼你需要包括在正則表達式的字符。

s/^\.\///; 

兩個./在這個表達式中的特殊含義(.是一個正則表達式元字符的意思是「任何字符」和/是爲s///運營商的分隔符),所以我們需要投入\逃脫他們兩個他們面前。

/問題的替代方法(在我看來更好)方法是更改​​您使用的字符作爲s///分隔符。

s|^\./||; 

這全部記錄在perldoc perlop