perl查找并替换../和

时间:2012-09-06 01:42:37

标签: perl

我使用Perl替换

的所有实例

../../../../../../abc' 

在带有

的字符串中 分别为

/ 

我使用的方法如下:

sub encode
{
    my $result = $_[0];
    $result =~ s/..\/..\/..\/..\/..\/..\//\//g;
    $result =~ s/ / /g;
    return $result;
}

这是对的吗?

3 个答案:

答案 0 :(得分:1)

基本上,是的,虽然第一个正则表达式必须以不同的方式编写:因为.匹配任何字符,我们必须将其\.转义或将其放入自己的字符类{{ 1}}。第一个正则表达式也可以写得更清晰

[.]

我们查找文字模式...; $result =~ s{ (?: [.][.]/ ){6} } {/}gx; ...; 重复../次,然后替换它。因为我使用花括号作为分隔符,所以我不必逃避斜线。因为我使用6修饰符,所以我可以在正则表达式中包含这些空格,从而提高可读性。

答案 1 :(得分:0)

试试这个。它将打印/foo bar/baz

#!/usr/bin/perl -w
use strict;
my $result = "../../../../../../foo bar/baz";

#$result =~ s/(\.\.\/)+/\//g; #for any number of ../
$result =~ s/(\.\.\/){6}/\//g; #for 6 exactly

$result =~ s/ / /g;
print $result . "\n";

答案 2 :(得分:0)

你忘记了abc,我想:

sub encode
{
    my $result = $_[0];
    $result =~ s/(?:..\/){6}abc/\//g;
    $result =~ s/ / /g;
    return $result;
}