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

perl の正規表現を用いて、文字列の抽出を行いたいのですがどのように
書けばいいのかわかりません。

実現したいことは
「Y:/フォルダ名/フォルダ名/ファイル名.拡張子」
というテキストに対して
「拡張子」のみを抽出することと
「ファイル名」のみを抽出することです。

パターンマッチや変換はなんとなくわかるのですが
抽出の仕方がよくわかりません。
よろしくお願いいたします。

A 回答 (4件)

File::Basenameを使うのがよいかと。


http://perldoc.perl.org/File/Basename.html

もしかすると、cmd.exeでdirとforを使うか、Scripting.FileSystemObjects使うほうが楽かもしれない。

参考URL:http://www.ideone.com/EAlSM

この回答への補足

回答ありがとうございます。

さっそくFile::Basenameを使ってみました。
期待していた通りのものだったのですが、ひとつ気になる点がありました。

ファイル名に「構築」とい文字が入っていると、おかしなころで区切られてしまいます。
例えば
C:/aaa/bbb/ccc/構築.docx このようなディレクトリ構成のファイルがあった場合

ディレクトリネームが C:/aaa/bbb/ccc/構
ファイルネームが   築
拡張子が       .docx
となってしまいます。

原因がどこにあるのかさっぱりですが、ここは無視して利用しようかなと考えています。

補足日時:2011/12/12 11:23
    • good
    • 0

実験すればすぐにわかるのですが, File::Basename を使うと


d:/hoge/hage/aaaaa
というパスに対し
・ディレクトリ: d:/hoge/hage/
・ファイル名: aaaaa
・サフィックス: (なし)
という結果が得られます. #2 の補足を読むとこれではだめなような気もするんですが, どうなんでしょうか?

この回答への補足

そのようになってしまうのですか。
拡張子のないファイルも想定していますが
拡張子付きのファイルのみを今後使っていこうと思います。

細かい補足までしていただき本当にありがとうございます!

補足日時:2011/12/12 19:03
    • good
    • 0

> 原因がどこにあるのかさっぱりですが


文字コードに原因があって、
具体的にはEncodeモジュールで、cp932をutf8にしてやると良いです。
    • good
    • 0
この回答へのお礼

utfに変換してやってみたら、しっかりと抽出ができました!

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

お礼日時:2011/12/12 19:13

基本的には #1 で終わりなんだろうけど, 「拡張子」とか「ファイル名」とかっていったいなんだろうと思うと難しいところがあるんだよね....



例えば, 以下のものに対してそれぞれどうなってほしいですか?
a.b.c.d
aaaaa
.x

この回答への補足

a.b.c.d
に対しては、ファイル名がa.b.cの拡張子が.d
aaaaa
に対しては、ファイルではなくディレクトリ
.x
に対してはファイル名がなしの、拡張子が.xのファイル

それぞれ上のように出力できるとよいと考えています。

補足日時:2011/12/12 11:27
    • good
    • 0

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