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 に答える