36

パス (文字列の一部である場合) と拡張子のないファイル名を取得したいと考えています。

例えば:

/path/to/file/fileName.txt     # results in "fileName"
fileName.txt                   # results in "fileName"
/path/to/file/file.with.periods.txt    # results in "file.with.periods" 

したがって、基本的には、最後の「/」がある場合はその前と最後の「。」も含めて、すべて削除したいと考えています。その後のメタ文字と一緒に。

このような初心者の質問で申し訳ありませんが、私は perl を初めて使用します。

4

3 に答える 3

42

完全なパスを指定してファイルのベース名をポータブルに取得するにFile::Basenameは、コアの一部であるモジュールをお勧めします。

ファイル拡張子でヒューリスティックを行うには、次のような正規表現を使用します

(my $without_extension = $basename) =~ s/\.[^.]+$//;
于 2010-09-08T12:54:11.767 に答える
23

他の人が応答しましたが、raflの答えごとにbasenameについて少し読んだ後:

($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz"

1行で問題を解決するようです。

他の解決策とは対照的に、これに関連する問題はありますか?

于 2010-09-08T13:03:10.687 に答える
16

パスセパレーターが であると仮定すると、置換'/'のペアでそれを行うことができます:

$name =~ s{^.*/}{};     # remove the leading path  
$name =~ s{\.[^.]+$}{}; # remove the extension

単一の置換としてそれを書くこともできます:

$name =~ s{^.*/|\.[^.]+$}{}g;
于 2010-09-08T12:54:50.520 に答える