以下の数種類のパスがあります。
c:\aaaaa\000001\abc\index.html
d:\bbbb\ddd\test.txt
z:\共通\福岡\天神\メンタイコ\mentai.csv
上記の3種類のパスがあったとして、正規表現で直前のフォルダまでを取り出したいときはどうすればいいでしょうか?
欲しい結果は以下の通りです。
c:\aaaaa\000001\abc
d:\bbbb\ddd
z:\共通\福岡\天神\メンタイコ
このような結果が欲しい場合、正規表現でどのようにすればいいか、
知っている方、教えて下さい。
$path = 'z:\共通\福岡\天神\メンタイコ\mentai.csv' ; $path =~ s/\\[^\\]*$// ;
こんな感じでは?
URLはダミーです。
最速であることに拘らないのなら、以下でよろしいのではないでしょうか。$1にセットされます。
'c:\aaaaa\000001\abc\index.html'=~/(^.+)\\[^\\]+$/
[コード]
foreach $i ('c:\aaaaa\000001\abc\index.html','d:\bbbb\ddd\test.txt','z:\共通\福岡\天神\メンタイコ\mentai.csv') { print $1,"\n" if $i=~/(^.+)\\[^\\]+$/ }
[実行結果]
c:\aaaaa\000001\abc d:\bbbb\ddd z:\共通\福岡\天神\メンタイコ
ありがとうございました!
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k05.htm
Perl 文字列関数群
厳密には正規表現ではありませんが、こういうやり方もあります。
$base = 'c:\aaaaa\000001\abc\index.html';
@parts = split(/\\/,$base); # \毎にバラバラにして配列に入れる
pop(@parts); # 最後(ファイル名)を取り除く
$result = join("\\",@parts); # \で再連結
print "$base => $result\n";
ディレクトリ区切り記号はOS依存なので、/\\/ではなく/[\\\/]/の方がベターです。
参考になります、こういうやり方もあったんですね、、、。
ありがとうございました。
ありがとうございます、さっそく組み込んでみます!