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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярное выражение для lostfilm и novafilm, извлечение названия сериала и серии 
:(
    Опции темы
PriZraK
Дата 22.7.2010, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте.
Пишу автомат для скачивания сериалов с сайтов lostfilm.tv и novafilm.tv.
Реализовал загрузку торрент файлов, но необходимо получать и складывать в БД информацию, что за торрент-файл был скачен и какому сериалу принадлежит.
Имею следующие данные:
Цитата
lostfilm.tv
Неизвестные (Persons Unknown). Правда (The Truth). (S01E06)
Тюдоры (The Tudors). Протестантка Анна Клевская (Protestant Anne of Cleves).. (S03E07)
Эврика (Eureka). Новый мир (A New World).. (S04E02)
Компьютерщики (The IT Crowd). Итальянский для начинающих (Italian for Beginners).. (S04E04)
Хранилище 13 (Warehouse 13). Кроткий (Mild Mannered).. (S02E02)

novafilm.tv
Твин Пикс (Twin Peaks) / Сезон 1, эпизод 2 "Traces to Nowhere" / WEB-DL / 720p / H.264, AC3, 2xRUS, ENG (Сериалы: драма)
Dead Like Me / Season 1, episode 01 "Pilot" / HDTV / 720p / Rus (TV3 Russia), Eng / NovaFiLM.TV (Сериалы: мистика)
Звездные врата. Вселенная (Stargate Universe) / Сезон 1, эпизод 3 "Air. Part 3" / WEB-DL / 720p / x264, AC3, RUS, ENG (Сериалы: фантастика)
Lie To Me / Season 2, episode 15 "Teacher and Pupils" / WEB-DL / 720p / x264, AC3, RUS, ENG / NovaFiLM.TV (Сериалы: драма)
Lie To Me / Season 2, episode 15 "Teacher and Pupils" / WEB-DL / RUS / NovaFiLM.TV (Сериалы: драма)
Звездные врата. Вселенная (Stargate Universe) / Сезон 1, эпизод 2 "Air. Part 2" / WEB-DL / 720p / x264, AC3, RUS, ENG (Сериалы: фантастика)
The Phantom / Mini-series / DVDRip / Rus (TV3 Russia), Eng / NovaFiLM.TV (Сериалы: фантастика)
Твин Пикс (Twin Peaks) / Сезон 1, эпизод 1 "Pilot" / WEB-DL / 720p / H.264, AC3, 2xRUS, 2xENG (Сериалы: драма)

Необходимо на выходе получить массив с данными:
  • русскоязычное название сериала
  • англоязычное название сериала
  • русскоязычное название серии (к сожалению novafilm не предоставляет)
  • англоязычное название серии
  • номер сезона
  • номер серии

PM MAIL ICQ Skype GTalk   Вверх
PriZraK
Дата 22.7.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нашёл простое и понятное описание регулярных выражений – http://debugger.ru/articles/nativeregexp.
По нему удалось разобрать строку от lostfilm.tv:
Код

    $txt='Неизвестные (Persons Unknown). Правда (The Truth). (S01E06)';

    $r1 = "((?:(?!\().)*)"; // русскоязычное название сериала
    $r2 = "\(";
    $r3 = "((?:(?!\)).)*)"; // англоязычное название сериала
    $r4 = "\)";

    $r5 = "\.\s";

    $r6 = "((?:(?!\().)*)"; // русскоязычное название серии
    $r7 = "\(";
    $r8 = "((?:(?!\)).)*)"; // англоязычное название серии
    $r9 = "\)";

    $r10 = "\.\s";

    $r11 = "\(";
    $r12 = "((?:(?![eE])(?<![sS]).)([0-9]{2}))"; // номер сезона
    $r13 = "((?:(?![sS])(?<!\)).)([0-9]{2}))"; // номер серии
    $r14 = "\)";

    if (preg_match("#".$r1.$r2.$r3.$r4.$r5.$r6.$r7.$r8.$r9.$r10.$r11.$r12.$r13.$r14."#is", $txt, $matches)){
        print_r($matches);
    }

На выходе получаю:
Цитата
Array
(
    [0] => Неизвестные (Persons Unknown). Правда (The Truth). (S01E06)
    [1] => Неизвестные 
    [2] => Persons Unknown
    [3] => Правда 
    [4] => The Truth
    [5] => S01
    [6] => 01
    [7] => E06
    [8] => 06
)

В принципе то что нужно (не выводить бы [5] => S01 и [7] => E06), вот только предполагаю, что может составлено не совсем верно.

UPD.
Для указанной строки, с горем пополам, написал регулярное выражение.
Код

    $txt='Lie To Me / Season 2, episode 15 "Teacher and Pupils" / WEB-DL / RUS / NovaFiLM.TV (Сериалы: драма)';


    $r1 = "((?:(?!\/).)*)"; // англоязычное название сериала
    $r2 = "\s\/\s";
    $r3 = "((?:(?!,)(?<!Season)\w+)\s([0-9]{1,2}))";    // номер сезона
    $r4 = ",\s";
    $r5 = "((?:(?!,)(?<!episode)\w+)\s([0-9]{1,2}))";    // номер серии
    $r6 = "\s";
    $r7 = "(\"(.*)\")";  // англоязычное название серии


    if (preg_match("#".$r1.$r2.$r3.$r4.$r5.$r6.$r7."#is", $txt, $matches)){
        print_r($matches);
    }

Результат работы:
Цитата
Array
(
    [0] => Lie To Me / Season 2, episode 15 "Teacher and Pupils"
    [1] => Lie To Me
    [2] => Season 2
    [3] => 2
    [4] => episode 15
    [5] => 15
    [6] => "Teacher and Pupils"
    [7] => Teacher and Pupils
)


Проблема:
novafilm.tv выводит данные по-разному – если отсутствует русскоязычное название, то англоязычное он выводит не в скобках, а на месте русскоязычного, с литературной точки зрения это верно, но вот как же такое расписать в регулярном выражении?
Так же хочется избавится от ненужных данных, в данном случае таких: [2] => Season 2, [4] => episode 15, [6] => "Teacher and Pupils"

Это сообщение отредактировал(а) PriZraK - 22.7.2010, 23:39
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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