[英]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.