Разбор пути через pregexp

Нечто

Психолог РНРClub
Разбор пути через pregexp

Здравствуйте!
Возникла тривиальная задача разобрать путь вида: /dir/subdir/filename.html на путь к файлу /dir/subdir и имя файла без расширения (заранее известно) - filename.
Стандартные basename/dirname/pathinfo не подошли из-за того, что basename('/dir/subdir/') == 'subdir', а мне нужно в этом случае знать, что файл не указан.

Раскуриваю PHP FAQ: Регулярные выражения., борясь с малоосновательным предубеждением, что это медленно.

Пока выкурил только
Код:
preg_match_all('/(.*)\/(.*)\.html/', $uri, $uri_elems);
что не работает, если нет файла на конце.

Спасибо, что прочитали сей нудный пост! Буду вдвойне благодарен, если найдете силы и время помочь советом :D
 

Stm

Новичок
PHP:
$s='/dir/subdir/filename.html';
$f=substr(strrchr($s, '/'),1);
$p=substr($s,0,strlen($s)-strlen($f));
echo '"'.$p.'" "'.$f.'"';
 

Нечто

Психолог РНРClub
Stm, да действительно :cool: Извините, тупняк у меня.
Огромное спасибо! Родина Вас не забудет!

-~{}~ 16.03.05 23:47:

Нисколько не хочу умалять функциональность вышеприведенного кода, но он не учитывает некоторые вещи (типа trailing slash), так что пришлось делать доп. проверки.

А рег я все-таки раскурил :D
PHP:
preg_match('/(?:^(.*)\/(\w+)\.html$)|(?:^(.*)$)/', $path, $uri_elems);
Только меня терзают смутные сомнения в том, что это самый лаконичный вариант.
 
Сверху