0

我正在使用 Perl 替换

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

在一个字符串中

/ ,分别。

我使用的方法如下所示:

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

这个对吗?

4

3 回答 3

1

本质上,是的,尽管第一个正则表达式必须以不同的方式编写:因为.匹配任何字符,我们必须对其进行转义\.或将其放入自己的字符类[.]中。第一个正则表达式也可以写成更简洁

...;
$result =~ s{  (?: [.][.]/ ){6}  }
            {/}gx;
...;

我们寻找../重复6多次的文字模式,然后替换它。因为我使用花括号作为分隔符,所以我不必转义斜线。因为我使用了/x修饰符,所以我可以在正则表达式中使用这些空格来提高可读性。

于 2012-09-06T02:16:52.387 回答
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";
于 2012-09-06T02:14:28.687 回答
0

你忘了ABC,我想:

sub encode
{
    my $result = $_[0];
    $result =~ s/(?:..\/){6}abc/\//g;
    $result =~ s/ / /g;
    return $result;
}
于 2012-09-06T02:20:56.677 回答