我使用Perl替换
的所有实例 ../../../../../../abc'
和 
在带有
的字符串中 分别为 /
和
。
我使用的方法如下:
sub encode
{
my $result = $_[0];
$result =~ s/..\/..\/..\/..\/..\/..\//\//g;
$result =~ s/ / /g;
return $result;
}
这是对的吗?
答案 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;
}