簡體   English   中英

字符串替換

[英]substitution in string

我有以下字符串./test ,我想用test替換它,因此,我在perl中編寫了以下代碼: my $t =~ s/^.//; 但是,用/test替換./test可以有人建議我如何解決它,以便也擺脫/ 謝謝!

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

您需要轉義圓點和斜線。

替換為s/match/replace/ 如果刪除,則為s/match// 您要匹配“以點和斜杠開頭”,即^\\.\\/

點不符合您的期望-與其匹配點字符,不如匹配任何字符,因為它經過特殊處理。 要匹配點和正斜杠,可以按如下方式重寫表達式:

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

請注意,您可以隨意使用其他字符作為分隔符,以免將其與正則表達式內的任何此類字符混淆。

如果要刪除./則需要在正則表達式中包括這兩個字符。

s/^\.\///;

兩者都有. /在此表達式中具有特殊含義( .是一個正則表達式元字符,表示“任何字符”,並且/s///運算符的分隔符),因此我們需要通過在它們前面加上\\來對它們進行轉義。

解決/問題的另一種方法(我認為更好)是更改用作s///分隔符的字符。

s|^\./||;

這全部記錄在perldoc perlop中

您必須在點和正斜杠之前使用反斜杠:s /\\.\\//; 反斜杠用於編寫符號,否則這些符號在正則表達式中將具有不同的含義。

您需要寫my $t =~ s/^\\.\\///; (請注意,需要轉義句點以匹配文字句點而不是任何字符)。 如果斜杠太多,您也可以更改定界符,改寫例如, my $t =~ s:^\\./::;

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

如果要與點匹配,則需要對點進行轉義。 否則,它匹配任何字符。 您可以選擇其他定界符---最好在處理正斜杠時,以免在其他情況下也需要轉義時避免出現牙簽的外觀。

請注意,問題中的點與任何字符都匹配,而不是文字“。”。

my $t = './test';
$t =~ s{\./}{};
use Path::Class qw( file );
say file("./test")->cleanup();

路徑::類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM