を使用して最後に出現するが、すべては"a/b/c/d/e"
言うと、私は最後/
を除くすべて置き換えたいです。すなわち、私の出力はa.b.c.d/e
でなければなりません。代替は、私は、文字列を持っているperlの
どのように私は同じことを行うには、私の代替コマンドs/\//./g
を変更するのですか?また、階層が必ずしも4 "/
"を持つとは限りません。任意の数にすることができます。
を使用して最後に出現するが、すべては"a/b/c/d/e"
言うと、私は最後/
を除くすべて置き換えたいです。すなわち、私の出力はa.b.c.d/e
でなければなりません。代替は、私は、文字列を持っているperlの
どのように私は同じことを行うには、私の代替コマンドs/\//./g
を変更するのですか?また、階層が必ずしも4 "/
"を持つとは限りません。任意の数にすることができます。
/
がさらに文字列の下にある/
をすべて置き換えます。それが最後の/
perl -wE'$_ = q(a/b/c/d/e); s{/(?=.*?/)}{.}g; say'
を除くこれは何を消費することなく(.*?
後)さらに下/
の存在を主張するために、positive lookahead、(?=...)
を使用しています。
もう一つの方法は、最初のアプローチを否定文字クラスパターンでキャプチャ(およびその文字列にそれを戻す)と
s{/([^/]*)(?=/)}{.$1}g;
しかし先読みでのみ固定文字列/
を使用することです上には/
と一致し、残りの部分については先読みが速くなることが分かりました。考えられる理由:([^/]*)
アプローチでキャプチャ(と、それは文字列でそれをコピーバックする必要があります)最初のものは、単一の文字の上書きをしながら(.*?
が後戻りしません)。
Benchmarkedに:126パーセントv5.10.1下速く、v5.27.2(デスクトップ)とv5.16.1(新しいサーバ)と110%。 4つのパスコンポーネントに対して4〜10文字の長い文字列でテストされています。これに注目するとの入力を求める、と、比較の上のコメントのためのikegamiへ
感謝。
リマインダー、[誰かが私の質問に答えるとき、私は何をすべきか?]を参照してください(http://stackoverflow.com/help/someone-answers) – zdim