[perl] /区切りのフルパスから、ファイル名部分を抜き出す正規表現を教えてください。

[上に] [前に] [次に]
エレガント兄 2000/02/04(金) 15:06:51
正規表現がどうも苦手です。
/home/hoge/file.txt から file.txt を抜き出す正規表現はどうやるのでしょうか?
また、正規表現を完全マスターするのに適した教材はないでしょうか?

コガ [E-Mail] [HomePage] 2000/02/04(金) 17:33:28
こんな感じでいいのかな?
$ans = "/home/hoge/file.txt";
$ans =~ s/(.*\/)*//;

私も正規表現は苦手なのですが、ナツメ社のPerlハンドブックを使って
勉強してます。

2000/02/05(土) 00:03:58
$ans = "/home/hoge/file.txt";
($file) = ($ans =~ m|([^/]+)*$|);

教材は無いですけど,いろんなパターンをやるしかないですね.

2000/02/05(土) 00:32:57
うが,削り損ねた(>_<)
($file) = ($ans =~ m|([^/]+)$|);

B-Cus 2000/02/05(土) 07:51:22
s|.*/||; が最近の好みかな。

> 教材
http://www.oreilly.co.jp/BOOK/regex.htm とか。

NANASHI 2000/02/05(土) 11:12:56
$filename=(reverse(split(m#/#,$ENV{SCRIPT_NAME})))[0];
自分はこんな事しています。
これなら確実に最後の/より後だけを抜き出せます。

この場合、
$path='/home/hoge/file.txt';
$filename=(reverse(split(m#/#,$path)))[0];
で、どうでしょう?

NANASHI 2000/02/05(土) 18:07:58
前言修正!
>$filename=(reverse(split(m#/#,$path)))[0];
だと、#の後にスペースがあったときにコメント扱いされてしまうそうなので、
$filename=(reverse(split(m!/!,$path)))[0];
の方がいいかも知れません。

って、自分の意見が一番効率悪いような気が...

[上に] [前に] [次に]