RegExp. Регулярки с условием
Пишу в связи с тем, что у меня отсутствует участок мозга, отвечающий за регулярки (этот же участок отвечал за понимание матана и теории компиляторов в институте, поэтому у меня всегда был неуд с натяжкой). Также я убеждён, что на этом форуме обитают эксперты, для которых мой случай — как семечки щёлкать :)
Дано
исходная ссылка.
Задача
Пишу парсер. Обвязка готова, дело за главным.
Надо вытащить актуальные цены. У меня цены вытаскиваются все, без разбора.
Хотелось бы сделать такую логику:
Tax fare вытаскивается отдельным проходом (это у меня готово).
Если есть Your fare — берём эту цену, иначе берём Launch fare.
Иногда попадается Sold Out, тогда записываем как есть.
На выходе — массив строго из 5 элементов.
У меня получается столько элементов, сколько всего цен. Мои реги на работе остались, утром вышлю. Вдруг поможет.
Читал эту ссылку, что-то вроде получалось, но истина всё ещё где-то рядом. http://www.regular-expressions.info/conditional.html
Всем хорошего дня и с наступающим новым годом :)
Можете воспользоваться позитивным и негативным просмотром вперед или назад + в самой регулярке использовать группировки. В любом случае, это выходит действительно слишком сложно и муторно.
Я бы предложил разбивать эти 5 ячеек на 5 отдельных строк и уже для каждой применять более мелкую регулярку. Менее масштабную, чем в ваших грандиозных планах.
Впрочем, я сейчас решаю задачу в два прохода. За первый проход выделяем блоки с ценами и их имена, во втором — сами цены или Sold Out.
Впрочем, я сейчас решаю задачу в два прохода. За первый проход выделяем блоки с ценами и их имена, во втором — сами цены или Sold Out.
Более крутой подход это решить поставленную задачу за пару часов, а не сношать себе мозг "правильным" решением. Ты же не фреймворк на весь мир пишешь, а просто одноразовый скрипт для сбора информации. Так не все ли равно как он будет работать?
Ну молодец, что решил. Вообще в программировании почти всегда задача имеет несколько решений (а бывает что и несколько десятков). Чем больше у программиста опыта, тем больше решений он видит, и тем сложнее порой выбрать верное. Но есть задачи, у которых много верных решений, поэтому выбор становится вопросом одного лишь вкуса и привычек.
.
красивое регулярное выражение лучше, с точки зрения чистого искусства. если подумать и залезть "под капот" регулярке, то ты очень быстро отучишься использовать их направо-налево.
Красивым оно не может быть в принципе, хотя я видимо ангажирован знанием об их устройстве.
Присоединяюсь к ораторам о необходимости использовать готовый HTML парсер, желательно поддерживающий язык запросов XPath - в этом случае при обновлении схемы данных (структуры страницы) придется исправить лишь этот запрос.
Кошмарный ужас :)
.
регулярные выражения, как вещь в себе, могут быть вполне изящны и замечательны. устройство их я выношу за скобки.