字符串替换

时间:2011-12-07 19:24:06

标签: string perl substitution

我有以下字符串./test 我想用test替换它 所以,我在perl中写了以下内容: my $t =~ s/^.//; 但是,用./test取代/test 任何人都可以建议我如何解决它,所以我也摆脱了/。谢谢!

8 个答案:

答案 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();

Path::Class