フルパスからディレクトリ名を取り除いて、ファイル名だけを取得したい場合があります。そんなときには正規表現が便利です。
にしし ふぁくとりー

にししの Perl/CGI Tips ふぁくとりー

にししふぁくとりーPerl/CGI Tips → このページ

文字列操作関連TIPS

ディレクトリ名を取り除いてファイル名だけを抜き出す

ディレクトリ名(フォルダ名)を含んだ文字列から、ファイル名だけを抜き出したいという場合があります。 そんなときには、正規表現を使えば簡単です。

SOURCE 1

正規表現を使って次のように書けばOKです。
if( $pathname =~ m|.*/(.*)$|i ) {
   $filename = $1;
}
上記は、ディレクトリの区切りが「 / 」の場合の例です。 変数 $pathname にディレクトリ名を含んだパス文字列が格納されているとすると、$filename にはファイル名だけが入ります。
正規表現中のカッコ「(」〜「)」は、その部分に一致した文字列が、変数 $1 の中に格納されます。 つまり、この中にファイル名だけが一致するようにすれば良いわけです。
なお、「 m|(.*)$|i 」ではダメです。これだと、ディレクトリの区切り文字が複数回登場する場合、「最初の区切り文字から最後まで」が一致してしまい、余計なディレクトリ名もくっついてしまいます。

SOURCE 2

ディレクトリの区切りが「 \ 」の場合は、
if( $pathname =~ m/.*\\(.+)$/i ) {
   $filename = $1;
}
…こうなります。
正規表現の「 m/パターン/i 」の、最後の i は、大文字・小文字を区別しないという指示です。 まあ、この場合、あってもなくても一緒なんですけど。

SAMPLE SOURCE

ソースコード11 , 出力結果11
2004/02/28. Sat.

このページに記載の内容は、必ずしも正しいとは限りません。ご注意下さい。
製作者にししへのご連絡は、メールなどでお送り下さい。
どのページへもリンクは歓迎します。