人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perl の正規表現についての質問です。

以下の数種類のパスがあります。

c:\aaaaa\000001\abc\index.html
d:\bbbb\ddd\test.txt
z:\共通\福岡\天神\メンタイコ\mentai.csv

上記の3種類のパスがあったとして、正規表現で直前のフォルダまでを取り出したいときはどうすればいいでしょうか?

欲しい結果は以下の通りです。

c:\aaaaa\000001\abc
d:\bbbb\ddd
z:\共通\福岡\天神\メンタイコ

このような結果が欲しい場合、正規表現でどのようにすればいいか、
知っている方、教えて下さい。

●質問者: zachouR
●カテゴリ:コンピュータ インターネット
✍キーワード:ABC CSV ddd HTML INDEX
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● GEN111
●27ポイント
$path = 'z:\共通\福岡\天神\メンタイコ\mentai.csv' ;
$path =~ s/\\[^\\]*$// ;

こんな感じでは?

http://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html

◎質問者からの返答

ありがとうございます、さっそく組み込んでみます!


2 ● n9d
●27ポイント

http://q.hatena.ne.jp/

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:\共通\福岡\天神\メンタイコ
◎質問者からの返答

ありがとうございました!


3 ● Quphondi
●26ポイント

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依存なので、/\\/ではなく/[\\\/]/の方がベターです。

◎質問者からの返答

参考になります、こういうやり方もあったんですね、、、。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ