性格いい人が優勝

Perlの正規表現を使って
c:\xxxx\xxxx\xxxx\xxxx\abc.txt
のようにファイルの絶対パスで記述されている文を
c:\xxxx\xxxx\xxxx\xxxx
のように
ファイル名部分だけを削除して、
フォルダの絶対パスに
表示させる正規表現を教えていただけないでしょうか?
ちなみにxxxxは可変値、階層の深さも決まっておらず、
ファイルの拡張子もtxt,htm,拡張子なしなどです。

よろしくお願いいたします。

A 回答 (4件)

最下行しか変換されないということですが、



$file='C:\xxxx\xxxx\xxxx\xxxx\abc.txt<改行>C:\yyyy\yyy\yyy\def.htm<改行>D:\zzz\ghi.doc'

みたいな形でデータが入っているのではないかと思います。(改行入っているかどうかまでは判断できませんが)

もしそうであれば、
$file=~s/\\[^\\]*\r/\r/g;
で解決すると思います。

この回答への補足

ありがとうございます。上記でできました。

補足日時:2004/10/08 20:07
    • good
    • 0

正規表現でということですので、下記のようになります。



$file='\xxxx\xxxx\xxxx\xxxx\abc.txt';
$file=~s/\\[^\\]*$//;

この回答への補足

上記実行すると

C:\xxxx\xxxx\xxxx\xxxx\abc.txt
C:\yyyy\yyy\yyy\def.htm
D:\zzz\ghi.doc

C:\xxxx\xxxx\xxxx\xxxx\abc.txt
C:\yyyy\yyy\yyy\def.htm
D:\zzz
のように最下行のものしか変換されません。

補足日時:2004/10/08 19:00
    • good
    • 0

こんなか感じではどうでしょうか?



#!/usr/bin/perl

$t = 'c:\xxxx\xxxx\xxxx\xxxx\abc.txt';

if ($t =~ m/([a-z:\\]+)\\[a-z\.]+$/) {
print $1. "\n";
}

この回答への補足

Perl自体入っていないのでこの方法はできないです。
1文で正規表現化する方法はないでしょうか?

補足日時:2004/10/08 18:58
    • good
    • 0

PerlならFile::Basenameモジュールを使うと自分でコーディングを行わなくてもそのような処理ができますよ

この回答への補足

Perlの正規表現と書いたのですが、
実機にはPerlが入っていないのです。(入れられない)
Perlの正規表現でファイル内の文字列をGREPするツールを使うために、
Perlの正規表現で記述しないといけないのです。
なのでモジュールを使う方法は使えません。

補足日時:2004/10/08 18:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!