人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

正規表現でディレクトリ内のファイル名にマッチさせたいんですがどうすればいいかわかりません。


http://aaa.com/bbb/ccc.jpg
http://ddd.com/eee/fff/ggg.gif
http://hhh.com/iii.png

上のような例で条件として
ディレクトリの階層が違ったりするのと
ファイルの拡張子が一致しなかったりします。

つまり最下層のディレクトリ内のファイルに
マッチさせたいんですがわかりません。
どなたか助けてください。お願いします。
言語はPHPです。

●質問者: jinchangz
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP ディレクトリ ファイル マッチ 拡張子
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● wizemperor
●30ポイント

質問からすると、ファイルのリストは既に取得してあり、文字列として格納されているということですよね?

$str = 'http://ddd.com/eee/fff/ggg.gif'
$filename = preg_match('!^(?:.*[/\\])?(.*)$!', $str, $matches) ? $matches[1] : '';

こんな感じではどうですか?

配列にファイルのリストが入っているなら、

$str[] = 'http://ddd.com/eee/fff/ggg.gif'
$str[] = 'http://ddd.com/eee/ggg.gif'

foreach($str as $value) {
 $filename[] = preg_match('!^(?:.*[/\\])?(.*)$!', $str, $matches) ? $matches[1] : '';
}

こんな感じで。


http://aaa.com/bbb/ccc.jpg

http://ddd.com/eee/fff/ggg.gif

http://hhh.com/iii.png

C:\hhh.com\iii.png

iii.png

全てにマッチすると思います。

◎質問者からの返答

返信が遅れてスイマセン。

いろいろ試してみたんですがエラーが出てしまいうまくいきませんでした。

お手数かけてすいません。


2 ● y-kawaz
●40ポイント ベストアンサー

以下のような正規表現でマッチできると思います。

<?php
//$url = 'http://example.jp/foo/bar.gif';
//$url = 'http://example.jp/foo/bar.gif#hoge';
$url = 'http://example.jp/foo/bar.gif?hoge=fuga';
if(preg_match('/([^\/]+?)([\?#].*)?$/', $url, $matches)) {
 $filename = $matches[1];
}
?>

説明

◎質問者からの返答

返事が遅れてしまいすいません。

試してみたところうまくいきました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ