![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
evya |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
Все с наступившим новым Годом!
Помогите, имею файл My.File.Second.jpeg как мне выделить в две различных переменных $i="My.File.Second"; $ii="jpeg"; Если бы без точек разделил бы сам. |
|||
|
||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
my ($head, $tail) = $file =~ /(.*)\.(.*)/
|
|||
|
||||
evya |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
Спасибо большое!!!!!!!!!!!!
а есть ли возможность расшифровать словами что именно значит /(.*)\.(.*)/ |
|||
|
||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Она немного хитрая. Использует "жадность" оператора "*". Если переводить её дословно - то будет "захвати всю строку, потом отдай обратно всё до первого с конца (т.е. последнего - как раз он нам и нужен) символа точки, и во 2ю группу захватить остаток после точки до конца строки".
|
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
Регулярка, используяющая жадность, работает дольше чем с чётким определением, тем более без граничных маркеров.
Лучше использовать /^(.*)\.([^.]+)$/ |
|||
|
||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
1) Всё, что начинается с .*, не требует ^ - оно сматчится в любом случае с начала, в крайнем случае дав пустую строку
2) Аналогично для $ и конечного .* 3) Фраза "Регулярка, используяющая жадность, работает дольше чем с чётким определением", в общем-то, верна, но в вашей регулярке - жадность осталась, единственный кусок, который будет отыгрываться назад - это, как раз, /(.*)\./ - его вы никуда не дели, зачем-то только навесив на 2ю половину требование проверки отсутствия точки - которой там никогда не будет. Поздравляю, движку задана лишняя работа ![]() 4) Если уходить от жадности, то тогда уж /(.*?)\.([^.]+)$/ (найдите 2 отличия, и вот здесь якорь $ обоснован), но она будет работать медленнее жадного варианта. Догадываетесь, почему?) Это сообщение отредактировал(а) DurRandir - 5.1.2011, 17:45 |
|||
|
||||
vadiml |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 27.7.2007 Репутация: 5 Всего: 7 |
В версиях 5.8 и 5.10 был баг, в результате которого вариант /(.*)\.(.*)/ весьма притормаживал -- начинал делать лишние обходы в поисках дополнительных вариантов.
Исправлен в 5.12 |
|||
|
||||
evya |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
Где в инете можно почитать об жадных регулярках
|
|||
|
||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
>evya
Хорошая книга по регуляркам - http://oreilly.com/catalog/9780596528126 >vadiml Я на 5.8.8 прогнал жадный вариант под use re 'debug' - он отработал ровно то, что должен по теории. М.б. там нужен какой-то более сложный пример. |
|||
|
||||
evya |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
Есть ли возможность выслать в pdf?
|
|||
|
||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Я её где-то в сети находил.
|
|||
|
||||
evya |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
как к специалисту,
подскажи еще по регулярке имею имя файла 802FILE.JPEG Необходимо отделить первые цифры от имени файла и само имя файла имя файла может быть 1File.jpeg 10File.jpeg 100File.gpeg 1000File.gpeg Добавлено через 8 минут и 20 секунд или немного проще есть имя файла 802FILE.JPEG есть переменная $id=802 как отделить в $file без $id |
|||
|
||||
DurRandir |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Ну это же вообще простейшая) Тут даже perlretut достаточно.
my ($num, $name) = $file =~ /^(\d+)(.*)/; |
|||
|
||||
evya |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 7.3.2009 Репутация: нет Всего: нет |
может я неправильно написал!
есть имя файла 802FILE.JPEG есть переменная $id=802 как отделить в $file без $id т.е.$newfile="FILE.JPEG"; А вашем выражении нет $id my ($num, $name) = $file =~ /^(\d+)(.*)/; |
|||
|
||||
alezzz |
|
|||
![]() сплю... ![]() ![]() Профиль Группа: Участник Сообщений: 499 Регистрация: 17.8.2009 Репутация: 1 Всего: 14 |
Если найти файл который начинается на $id и записать в $newfile все что идет за $id,то так:
my ($newfile)= $file =~ /^$id(.*)/; или, наверное, лучше так: my ($newfile) = $file =~ /^$id(\D.*)/; если $id состоит из цифр. Это сообщение отредактировал(а) alezzz - 7.1.2011, 22:59 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |