Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вытащить часть из ссылки 
:(
    Опции темы
ramen
Дата 30.6.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 10.6.2008

Репутация: нет
Всего: нет



Есть ссылка к примеру http://test1.ru/folder/file.rar Папка и имя файла могут иметь разные имена и расширение.
Как узнать имя фолдер?
PM MAIL ICQ   Вверх
Mal Hack
Дата 30.6.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Варианты: explode, parse_url, mreg_match
PM ICQ   Вверх
ramen
Дата 1.7.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 10.6.2008

Репутация: нет
Всего: нет



Как записать это?
PM MAIL ICQ   Вверх
bars80080
Дата 1.7.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 2
Всего: 315



да так:
http://php.ru/manual/function.explode.html
http://php.ru/manual/function.parse-url.html

всё зависит, что вам надо. если я правильно понял, и вам нужен путь , то его лучше определить:
Код

$a = parse_url($link);
echo $a['path'];

если нужна именно папка, в которой файл, то всё равно придётся эксплодом:
Код

$a = explode('/', $link);
echo $a[count($a) - 2];

PM MAIL WWW   Вверх
Feldmarschall
Дата 1.7.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



набрать в браузере адрес http://php.net
там вверху справа будет окошко поиска
последовательно ввести в окошко названия предложенных функций и прочитать их описание в документации.
там будут примеры.
PM   Вверх
amg
Дата 5.7.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 1
Всего: 50



Код
preg_match('|^http://([^/]+)/?((?:[^/]+/)*)([^/]*)$|', $url, $result);
echo "Site: $result[1]\nFolder: $result[2]\nFile: $result[3]\n";


PM MAIL   Вверх
Mal Hack
Дата 5.7.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



amg, ну я конечно понимаю, что решения разные бывают, но когда есть в 20 раз проще, зачем реглярки использовать, причем регулярка колоссально не оптимальная...
PM ICQ   Вверх
amg
Дата 5.7.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 1
Всего: 50



Цитата(Mal Hack @  5.7.2008,  13:20 Найти цитируемый пост)
... причем регулярка колоссально не оптимальная...
Но позвольте полюбопытствовать, как выглядит гораздо более оптимальная регулярка?

PM MAIL   Вверх
Mal Hack
Дата 5.7.2008, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Цитата(amg @  5.7.2008,  14:44 Найти цитируемый пост)
Но позвольте полюбопытствовать, как выглядит гораздо более оптимальная регулярка?

Я имел ввиду не саму регулярку, а вообще использование регулярных выражений в данном случае.
Более оптимальный вариант я изложил выше.
Что касается самой оптимальной регулярки, точнее функциональной, то см тут: http://forum.vingrad.ru/forum/topic-75770.html
PM ICQ   Вверх
CyClon
Дата 7.7.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 1
Всего: 4



Код
echo basename(dirname(__FILE__));



--------------------
user posted image
PM   Вверх
amg
Дата 8.7.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 1
Всего: 50



Цитата(Mal Hack @  5.7.2008,  21:25 Найти цитируемый пост)
Что касается самой оптимальной регулярки, точнее функциональной, то см тут: http://forum.vingrad.ru/forum/topic-75770.html

Уважаемый Mal Hack! Просмотрел я наконец то  указанная Вами ссылку, но, к сожалению, не не увидел там способов существенно оптимизировать обсуждаемую здесь регулярку (вообще, в топике про урлы, на который можно попасть по этой ссылке, обсуждалась задача нахождения урла в строке, здесь же, насколько я понял, задача иная - пропарсить строку, заведомо содержащую урл, т.е. проверка на валидность не нужна). 

Единственное, что пришло мне в голову в плане оптимизации - это преобразование первоначальной регулярки к виду
'|^http://([^/]+)/?(.*/)?(.*)$|'
Сделанная здесь замена последних захватывающих скобок (поле File), очевидно, чуть-чуть повысит эффективность регулярки. Замена в скобках, захватывающих поле Folder, возможно, тоже, но только если имя файла не очень длинное и откатов будет немного - тут надо проверять на реальных примерах. Замечу еще, что замена ((?:[^/]+/)*) на (.*/)? несколько ограничивает функциональность: если в первом случае заложена возможность получения для вложенных папок каждой папки в отдельности, то во втором - нет.

Блин, получается, спорю сам с собой smile 

PS Поймите меня правильно, я согласен с тем, что применение регулярных выражений в данном случае - не самое правильное, но меня очень заинтересовала отмеченная Вами возможность резкого увеличения оптимальности регулярки, т.к. с регулярными выражениями приходится иметь дело часто и, как правило, необходима их максимальная эффективность.
PM MAIL   Вверх
Mal Hack
Дата 8.7.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



amg, 
Цитата(Mal Hack @  5.7.2008,  21:25 Найти цитируемый пост)
Я имел ввиду не саму регулярку, а вообще использование регулярных выражений в данном случае.

другим языком, использовать для решения данной задач PCRE не оптимально.
Цитата(Mal Hack @  5.7.2008,  21:25 Найти цитируемый пост)
Что касается самой оптимальной регулярки, точнее функциональной,

оптимальный функционал == что регулярка делает (минимум пролетов мимо), а не на сколько она оптимальна, с точки зрения быстродействия. Извините, несколько не коректно выразился первоначально.
PM ICQ   Вверх
amg
Дата 8.7.2008, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 1
Всего: 50



Mal Hack, понятно. Благодарю за разъяснение!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.