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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярное выражение, имя файла 
:(
    Опции темы
evya
Дата 5.1.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все с наступившим новым Годом!


Помогите, имею файл My.File.Second.jpeg

как мне выделить в две различных переменных

$i="My.File.Second";
$ii="jpeg";

Если бы без точек разделил бы сам.

PM MAIL   Вверх
DurRandir
Дата 5.1.2011, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



my ($head, $tail) = $file =~ /(.*)\.(.*)/
PM   Вверх
evya
Дата 5.1.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо большое!!!!!!!!!!!!
а есть ли возможность расшифровать словами что именно значит /(.*)\.(.*)/ 
PM MAIL   Вверх
DurRandir
Дата 5.1.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Она немного хитрая. Использует "жадность" оператора "*". Если переводить её дословно - то будет "захвати всю строку, потом отдай обратно всё до первого с конца (т.е. последнего - как раз он нам и нужен) символа точки, и во 2ю группу захватить остаток после точки до конца строки".
PM   Вверх
vadiml
Дата 5.1.2011, 17:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Регулярка, используяющая жадность, работает дольше чем с чётким определением, тем более без граничных маркеров.

Лучше использовать /^(.*)\.([^.]+)$/
PM MAIL Jabber   Вверх
DurRandir
Дата 5.1.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1) Всё, что начинается с .*, не требует ^ - оно сматчится в любом случае с начала, в крайнем случае дав пустую строку
2) Аналогично для $ и конечного .*
3) Фраза "Регулярка, используяющая жадность, работает дольше чем с чётким определением", в общем-то, верна, но в вашей регулярке - жадность осталась, единственный кусок, который будет отыгрываться назад - это, как раз, /(.*)\./ - его вы никуда не дели, зачем-то только навесив на 2ю половину требование проверки отсутствия точки - которой там никогда не будет. Поздравляю, движку задана лишняя работа smile
4) Если уходить от жадности, то тогда уж /(.*?)\.([^.]+)$/ (найдите 2 отличия, и вот здесь якорь $ обоснован), но она будет работать медленнее жадного варианта. Догадываетесь, почему?)

Это сообщение отредактировал(а) DurRandir - 5.1.2011, 17:45
PM   Вверх
vadiml
Дата 5.1.2011, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В версиях 5.8 и 5.10 был баг, в результате которого вариант /(.*)\.(.*)/ весьма притормаживал -- начинал делать лишние обходы в поисках дополнительных вариантов.
Исправлен в 5.12
PM MAIL Jabber   Вверх
evya
Дата 5.1.2011, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Где в инете можно почитать об жадных регулярках
PM MAIL   Вверх
DurRandir
Дата 5.1.2011, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



>evya
Хорошая книга по регуляркам - http://oreilly.com/catalog/9780596528126

>vadiml
Я на 5.8.8 прогнал жадный вариант под  use re 'debug'  - он отработал ровно то, что должен по теории. М.б. там нужен какой-то более сложный пример.
PM   Вверх
evya
Дата 5.1.2011, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть ли возможность выслать в pdf?

PM MAIL   Вверх
DurRandir
Дата 6.1.2011, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я её где-то в сети находил. 
PM   Вверх
evya
Дата 6.1.2011, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как к специалисту,
подскажи еще по регулярке
имею имя файла 802FILE.JPEG

Необходимо отделить первые цифры от имени файла и само имя файла

имя файла может быть

1File.jpeg
10File.jpeg
100File.gpeg
1000File.gpeg

Добавлено через 8 минут и 20 секунд
или немного проще
есть имя файла 802FILE.JPEG
есть переменная $id=802

как отделить в $file без $id



PM MAIL   Вверх
DurRandir
Дата 6.1.2011, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну это же вообще простейшая) Тут даже perlretut достаточно.

my ($num, $name) = $file =~ /^(\d+)(.*)/;
PM   Вверх
evya
Дата 7.1.2011, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



может я неправильно написал!

есть имя файла 802FILE.JPEG
есть переменная $id=802
как отделить в $file без $id
т.е.$newfile="FILE.JPEG";


А вашем выражении нет $id

my ($num, $name) = $file =~ /^(\d+)(.*)/; 

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


сплю...
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




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


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

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