文字列の最後の2列を取得したい
元
$path = C:\Documents and Settings\ac62599\AC62599_SBI_Release_2012.12.1_int\vob\SBI_src
$path = C:\views\ac62599\AC62599_view\vob\aims
output should be
\vob\SBI_src
\vob\aims
出力は次のようになります。前もって感謝します
split
パスをディレクトリに分割するために使用します。スライスを使用して最後の2つを取得し、次にjoin
それらを連結して戻すことができます。
for my $path ('C:\Documents and Settings\ac62599\AC62599_SBI_Release_2012.12.1_int\vob\SBI_src',
'C:\views\ac62599\AC62599_view\vob\aims') {
print '\\', join('\\', (split/\\/, $path)[-2, -1]), "\n";
}
正規表現が最も簡単な解決策のようです
my ($dir) = $path =~ /((?:\\[^\\]+){2})$/;
つまり、バックスラッシュを探し、その後に1つ以上のバックスラッシュ以外の文字を探し、文字列の最後でこのシーケンスを2回探して、それをキャプチャします。
正規表現リストのコンテキストを指定するには、変数を括弧で囲む必要があることに注意してください。
サンプルパスの出力:
\vob\SBI_src
\vob\aims
$string=~m/.*(\\[^\\]*\\[^\\]*)/g;print $1