Модераторы: ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> жадность рег.выр. помогите выбрать имя файла из пути 
V
    Опции темы
burakov
Дата 10.3.2008, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день.

Есть код
Код

$file = 'd:/111/222/333/444.mp3';
if ($file =~ /\/(.+\.mp3)$/){$file = $1; print "$file\n";}


необходимо в $1 выбрать из полного пути - имя файла
понимаю, что это делается, при помощи отключения жадности (другим способом я это уже реализовал, так что не предлагать smile).

Но куда бы не тулил "?" все равно в $1 захватывает кусок пути.
Подправьте пожалуйста код smile

Огромное Спасибо.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
Itsys
Дата 10.3.2008, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

if ($file =~ /([^\/]+\.mp3)$/){$file = $1; print "$file\n";


По идее вот так должно сработать.
PM MAIL WWW Skype   Вверх
burakov
Дата 10.3.2008, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо, работает...

Добавлено через 13 минут и 30 секунд
почитал про [^ ] - понял как работает
Код

if ($file =~ /([^\/]+\.mp3)$/){$file = $1; print "$file\n";


в принципе никаких возражений... хорошо

А все таки при помощи отключения жадности рег. выражений можно как нибудь выбрать имя файла из полного пути
чисто из принципа?

потому как 
слева направо (от начала в конец строки) - жадность у меня отключать ПОЛУЧАЕТСЯ
а вот справа налево (от конца строки в ее начало строки) - НЕТ.

СПАСИБО.







--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
sir_nuf_nuf
Дата 10.3.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



потому, что просмотр строки идет слева направо, иногда с возвратами назад.

а жадность вообще не имеет направления =)

perl ищет совпадение как можно раньше в строке.

т.е. если есть строка
$a = "aaabbb";

и шаблон /(\w+)(b+)/

то перл найдет $1 = "aaabb" и $2 = "b". потому что это не противоречит шаблону и $1 - максимально длинно.

если отключить жадность /(\w+?)(b+)/ то все будет точно так же, только будет найдено самое короткое значение $1
удовлетворяющее шаблону $1 = "aaa", $2 = "bbb";

заметьте, что в обоих случаях сначала был ищется совпадение для $1 а потом для $2. поэтому не бывает жадости справа налево


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


Эксперт
***


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

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



Еще вариант - заставить жадность работать на тебя:
Код

$file =~ s/.*[\/\\]//;

PM MAIL   Вверх
burakov
Дата 11.3.2008, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



понятненько.
всем большое спасибо.
тему закрываю.


--------------------
Нотный архив http://libnote.ru скачать ноты бесплатно
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Регулярные выражения | Следующая тема »


 




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


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

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