我有以下字符串./test
我想用test
替换它
所以,我在perl中写了以下内容:
my $t =~ s/^.//;
但是,用./test
取代/test
任何人都可以建议我如何解决它,所以我也摆脱了/
。谢谢!
答案 0 :(得分:6)
my $t =~ s/^\.\///;
你需要逃避点和斜线。
替换为s/match/replace/
。如果你擦除,那就是s/match//
。你想匹配“以点和斜线开头”,那就是^\.\/
。
答案 1 :(得分:4)
点不符合您的期望 - 而不是匹配点字符,因为它的特殊处理,它匹配任何字符。要匹配点和正斜杠,可以按如下方式重写表达式:
my $t =~ s|^\./||;
请注意,您可以自由地使用不同的字符作为分隔符,以免将其与正则表达式中的任何此类字符混淆。
答案 2 :(得分:4)
如果你想摆脱./
,那么你需要在正则表达式中包含这两个字符。
s/^\.\///;
.
和/
在此表达式中都有特殊含义(.
是正则表达式字符,表示“任何字符”,/
是{{1}的分隔符因此我们需要通过在它们前面放置s///
来转义它们。
\
问题的替代方法(在我看来,更好的方法)是更改您用作/
分隔符的字符。
s///
这些都记录在perldoc perlop。
中答案 3 :(得分:2)
你必须在点和正斜杠之前使用反斜杠:s /\.\//; 反斜杠用于编写符号,否则这些符号在正则表达式中具有不同的含义。
答案 4 :(得分:2)
您需要编写my $t =~ s/^\.\///;
(请注意,为了匹配文字句点而不是任何字符,需要对句点进行转义)。如果这是太多的斜杠,您也可以更改分隔符,改为编写,例如my $t =~ s:^\./::;
。
答案 5 :(得分:2)
$t=q(./test);$t=~s{^\./}{};print $t;
如果您希望它与点匹配,则需要转义点。否则它匹配任何字符。您可以选择备用分隔符 - 最好处理正斜杠时,以免在获得倾斜牙签时看起来也是如此。
答案 6 :(得分:2)
请注意,问题中的点匹配任何字符,而不是文字“。”。
my $t = './test';
$t =~ s{\./}{};
答案 7 :(得分:2)
use Path::Class qw( file );
say file("./test")->cleanup();