アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の文字列から、最後の「\」以降の文字列を取得する方法を
教えていただけますでしょうか。

D:\PROGRAM\ANALYZE\LAN\data0123.dat

この文字列から、「data0123.dat」を取り出したい。
「data0123.dat」の部分は、拡張子含めていろいろ変わります。

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

A 回答 (5件)

もっとスマートな式があるかもしれませんが


my $S = 'D:\PROGRAM\ANALYZE\LAN\data0123.dat';
## 正規表現
$S =~ m/.*\\([^\\]+)$/;
print $1;
ただし、ファイルパスを見るとDOS(Windows)環境のようですので環境はShift-JIS。
全角文字が混ざった場合には正規表現が正常動作する保障がありません。
正規表現の練習なら良いのですがこの程度の処理なら組み込み関数使った処理のほうが効率が良いと思います。
## 組み込み関数
print substr($S,rindex($S,"\\")+1);
ほかにも書き方はあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
スマートな書き方があるのですね。
print substr($S,rindex($S,"\\")+1);
の手法は参考になりました。
rindexは使ったことが無かったので、試してみます。

ちなみに今回の使い方としては、Webツール(CGI)でWindowsから
ファイル名称を読み取り、サーバ側でEUCコードに変換して処理を
しています。(ファイルアップロード時のファイル名称を使って、
出力ファイル名称等を生成させています。)

お礼日時:2008/06/03 11:19

正規表現なら


m/.*\\(.+)$/;
でいいはずです>#4.
$' を使うなら m/.*\\/ でマッチさせる.
    • good
    • 4
この回答へのお礼

お礼遅くなりましたが、ご回答ありがとうございました。
今回は色々な手法を伝授いただき、大変助かりました。
今後ともよろしくお願いいたします。

お礼日時:2008/06/17 11:51

splitを使って、次のように書けます。



$path = 'D:\PROGRAM\ANALYZE\LAN\data0123.dat';
$dat = (split /\\/, $path)[- 1]

$pathがご質問内容の文字列で、$datが取り出した部分です。
参考意見ということでよろしくお願い致します。
    • good
    • 1
この回答へのお礼

ご回答ありがとうごいざいます。
splitを使うという手もありましたね。
正規表現しか考えていませんでした。
参考にさせていただきます。

お礼日時:2008/06/03 10:13

#1 と違う方針をいくつか:


・正規表現は最長一致であることを使うと [] は使わなくていい
・$'
・split
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
以下コードで実現できましたが、正しくかつ効率的でしょうか?

my $org_str = "D:\PROGRAM\ANALYZE\LAN\data0123.dat";
my $new_str;

if($org_str =~ /\\\S+\\/){
$new_str = $';
}
print $new_str;

結果:
data0123.dat

お礼日時:2008/06/03 09:55

http://www.google.co.jp/search?q=%E6%AD%A3%E8%A6 …

ヒント
[ ] ^


答えまるまるは ここの約束で 書いてあげられない
    • good
    • 0
この回答へのお礼

ヒントのご提示ありがとうごいざいます。
試行錯誤してみます。
またよろしくお願いいたします。

お礼日時:2008/06/03 10:14

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