ФорумПрограммированиеPHP для идиотов → Вопрос по структуре реализации и снова регулярка

Вопрос по структуре реализации и снова регулярка

  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 27 декабря 2010 г. 4:04

    Уже были где-то вопросы по одной регулярке, я её успешно заюзал, было всё отлично доколе не заметил такого вот говна:
    регулярка:

    preg_match_all( "/<br \\/>([0-9]{1,2}\.).*?(?=<br \\/>)/i", $row['full_story'], $track);


    строка: 21. Respect - Aretha Franklin, получаем Respect - Aretha Franklin, все отлично, идём дальше
    строка: 17. The world's greatest - R. Kelly и получаем The world's greatest - R омг!?!?

    Вопросец по структуре. Таблице dle_post есть поле full_story из которого мы регуляркой выше берем треки. Всё отлично работает, теперь мне как-то нужно организовать всю систему до кучи. Поясняю в чём подвох, албомы музыки хоть и разные все, но в некоторых встречаются одинаковые треки, если на тупом без использования базы отправлять юзеров на другие страницы, то могут получаться дубли (любой пробел, апостроф, тире не такое, добавление feat и других мелочей может повлиять на страницу).

    Плюс используя ЧПУ и передачи данных на след страницу для дальнейшего скачивания трека или прослушивания делаем урл вида /track/Jamie+Foxx+-+Unpredictable/, в случае использования спецсимволов получаем и такие варианты /track/Brandy+-+Sittin%5C+Up+In+My+Room/, трек Brandy - Sittin' Up In My Room, вот наглядный пример потери апострофа.

    Используем:

    $track[1] = preg_replace("#(.*?)\(.*?\)(.*?)#is", "\\1\\3", $track[1]);
    $url = urlencode(trim(str_replace(array("'", "S ", "S","\""), "", $track[1])));

    (выше в коде кстати S - это shift+7 на eng, спецсимвол не пропускает)

    ну и потом заменяем данные при выводе в новости:

    $replace_track = str_replace("<br />", "<br /><a href=\"/track/".$url."/\"><img src=\"/templates/Default/style/download_.png\" onmouseover=\"this.src='/templates/Default/style/download.png'\" onmouseout=\"this.src='/templates/Default/style/download_.png'\" width=\"20\" height=\"20\" alt=\"Скачать ".trim($track[1])."\" title=\"Скачать ".trim($track[1])."\" border=\"0\" vspace=\"1\" align=\"middle\" /></a> <a href=\"#\"><img src=\"/templates/Default/style/play.png\" onmouseover=\"this.src='/templates/Default/style/play_on.png'\" onmouseout=\"this.src='/templates/Default/style/play.png'\" width=\"20\" height=\"20\" alt=\"Слушать ".trim($track[1])."\" title=\"Слушать ".trim($track[1])."\" border=\"0\" vspace=\"1\" align=\"middle\" /></a> ", $val);


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

    В принципе ничего не поменяется, та же регулярка, вносим данные в отдельную таблицу данные с предварительной проверкой на наличие и затем делаем автозамену треков в альбоме, подставляя ссылку с id либо свеже добавленного либо уже ранее добавленного трека, вида: /track/название-трека-id/ или ещё проще /track/id/. Плюс такого действия на лицо, во первых проверка базы на наличие трека, во вторых адекватный вывод названия трека на странице и его дальнейший поиск через api или парсер.

    Теперь о нагрузке на сервер и поиске треков по базе: сейчас 5000 альбовом в базе, ежедневно добавляется до 20-50 альбомов, в каждом от 12 до 100 треков (в среднем возмем 25), простые подсчеты подскажут что в базе будет 125 000 треков и каждый раз при открытии любого из альбомов будет идти поиск по базе 25 раз по 125 000 записям, это понятное дело маразм. Выслушаю предложения по структурной реализации и регулярке в первой части поста (чтобы не тормозило на точке).
  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 29 декабря 2010 г. 0:15, спустя 1 день 20 часов 10 минут

    за два дня ни одного поста, хоть бы говнеца кто-то подросил.
  • md5

    Сообщения: 11954 Репутация: N Группа: в ухо

    Spritz 29 декабря 2010 г. 0:41, спустя 25 минут 35 секунд

    ты и так подбросил достаточно гавнеца своим кодом))
    все умрут, а я изумруд
  • Mars

    Сообщения: 304 Репутация: N Группа: Кто попало

    Spritz 29 декабря 2010 г. 2:23, спустя 1 час 42 минуты 3 секунды


    ты и так подбросил достаточно гавнеца своим кодом))


    +1
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 29 декабря 2010 г. 2:43, спустя 19 минут 53 секунды

    дле, этим все насрано
    Сапожник без сапог
  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 29 декабря 2010 г. 6:45, спустя 4 часа 2 минуты 38 секунд

    вторую часть вопроса решил, осталась первая, про регулярку. как сделать так чтобы не тормозило на точке?
  • artoodetoo

    Сообщения: 5146 Репутация: N Группа: в ухо

    Spritz 29 декабря 2010 г. 20:51, спустя 14 часов 5 минут 39 секунд

    читать книжки по регуляркам. например Jeffrey E. F. Friedl. Mastering Regular Expressions - в интернетах полно электронных версий
    Спустя 282 сек.
    а вообще твоя регулярка выглядит так, как будто ты ищешь не названия, а НОМЕРА. следи за скобками
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5146 Репутация: N Группа: в ухо

    Spritz 29 декабря 2010 г. 21:08, спустя 17 минут 17 секунд

    /(?:<br.*>[0-9\.\s]*?)(.+)(?:<br.*>)/iU

    как? квотирующие слеши сам добавишь
    click
    ιιlllιlllι унц-унц
  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 30 декабря 2010 г. 12:08, спустя 14 часов 59 минут 22 секунды

    я отделяю названия потом. решил по другому:
    $tracking = trim($track[1] . $track[2] . $track[3]);

    сурово!
  • Frukts

    Сообщения: 28 Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 11:54, спустя 596 дней 22 часа 46 минут

    Да, при всей своей схожести, люди очень разные.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!