是否有正则表达式来删除Perl中的尾部斜杠?

时间:2010-03-20 18:47:04

标签: regex perl

我想从字符串中删除尾部斜杠。例如,如果我有一个名为的字符串 $ test =“test /”。我怎么能在最后删除斜线?

5 个答案:

答案 0 :(得分:12)

使用正则表达式执行:$test =~ s/\/$//

或者,如果您确定最后一个字符是斜线,则可以使用chop函数:chop $test

答案 1 :(得分:8)

如果您确定最后有一个/最终可以使用斩波功能:

$test = "test/";
$test = chop($test);

如果您不确定可以这样做:

$test = "test/";
$test = $1 if($test=~/(.*)\/$/);

答案 2 :(得分:8)

您可以使用s///替换运算符:

$test =~ s{/\z}{};

答案 3 :(得分:8)

就个人而言,我会改写这一点,以避免混合使用“\”和“/”

$test =~ s|/$||

如果您使用“|”你不需要引用“/”

答案 4 :(得分:0)

此代码段将处理除根目录之外的尾部斜杠:

#!/usr/bin/perl

my $test = './';
$test =~ s{(.+)/\z}{\1};
print $test."\n";

以下是它的工作原理:

正则表达式的第一部分 - s {(。+)/ \ z} - 在括号()中定义一个组。这是由正则表达式第二部分中的 \ 1 引用的 - {\ 1} 。在这个组中,我定义了一个或多个字符 - 。+ - 紧接着是正斜杠,然后是字符串的绝对结尾 - \ z

正则表达式将所有内容保存在括号内,稍后在替换规范中用作 \ 1 (基本上是第二部分。)

这与典型的sed策略非常相似,即:

echo "./" | sed -e 's:\(..*\)/$:\1:'

我希望这对你有所帮助。