Есть конечный набор идентификаторов: id1, id2, id3 ... id100
Как регуляркой поймать строки где какие-то из этих идентификаторы перечислены через разделитель в произвольном порядке. Например: id1_id2 или id2_id1 или id25_id1_id14_id8 итд
Это вообще возможно?
Опережая вопрос "Зачем?" отвечу: Для написания правила роутинга.
Форум → Программирование → Общие вопросы программирования → Регуляка, которая ловит строку для последующего split/explode
Регуляка, которая ловит строку для последующего split/explode
Страницы: ← Следующая страница →
-
-
15 апреля 2015 г. 14:39, спустя 11 минут 23 секунды
Я бы сразу сделал explode по разделителю и анализировал уже массив.
Опиши задачу подробнее, с примером.не всё полезно, что в swap полезло -
15 апреля 2015 г. 14:52, спустя 13 минут 4 секунды
тоже не совсем понял задачу.
дай входящие примеры роутов и что есть. но полагаю что задача просто регуляркой не решится. регулярка не хранит стек и не имеет строгой очередности совпадений.
Сапожник без сапог -
15 апреля 2015 г. 16:20, спустя 1 час 28 минут 24 секунды
Ладно, забейте я уже почти сделал, типа такого надо:
(id0|id1|id2|id3)(_(id0|id1|id2|id3))+
Пока только проблема в том, что можно много раз один и тот же идентификатор включить в строку, чего в идеале не должно было бы быть. Но для начала, сойдет.Пример роута типа
или
Мастер, explode понятное дело будет, но надо сначала выловить подходящие урлы
-
15 апреля 2015 г. 16:24, спустя 3 минуты 52 секунды
@AlexB, я бы сперва прогнал бенчмарком оба случая. как бы не оказалось, что регулярка на порядок медленнее эксплода =)
Спустя 134 сек.это вместо ?
не всё полезно, что в swap полезло -
15 апреля 2015 г. 16:28, спустя 3 минуты 49 секунд
Дык, для того чтобы прогонять эксплодом, надо сначала найти то, что через него прогонять. )))))
-
15 апреля 2015 г. 16:29, спустя 1 минуту 28 секунд
@AlexB, не нужно искать, т.к. на один запрос всегда один request url
какой логический смысл в такой форме news_photos_videos ?
не всё полезно, что в swap полезло -
15 апреля 2015 г. 16:32, спустя 2 минуты 23 секунды
это вместо ?
@master, ну как бы не совсем, представь что реальный случай несколько сложнеее
Как-то нехорошо типы слешами бить, еще сильнее роутинг запутается
Спустя 83 сек.@master, ты в курсе как устроен роутинг в любом фреймворке, в Джанге той же?
Спустя 68 сек.какой логический смысл в такой форме news_photos_videos ?
перечислить типы объектов, которые надо показать
-
15 апреля 2015 г. 16:39, спустя 7 минут 21 секунду
@AlexB, какие то костыли делаешь имхо ))
и таки да, порядок в регулярке не укажешь - я тебе еще выше ответил
Сапожник без сапог -
15 апреля 2015 г. 16:41, спустя 1 минуту 30 секунд
@phpdude, Предложи по другому?
Разве что через GET ?types=videos,photos
Но по ряду причин не охота так делать -
15 апреля 2015 г. 16:44, спустя 3 минуты 25 секунд
@phpdude, Предложи по другому?
Разве что через GET ?types=videos,photos
Но по ряду причин не охота так делать@AlexB, вот этот вариант мне больше симпатизирует. Ибо он более естественный, раз это фильтрация выдачи. Url path это все-таки расопложение документа, вы его както извратили короче)
Сапожник без сапог -
15 апреля 2015 г. 16:46, спустя 2 минуты 7 секунд
@AlexB, да, урл бьётся на переменным с определённым смыслом. во всех фреймворках по-разному
в данном случае походу
=> {typelist: 'photos_videos', date: '2015-01-01'}
я лично не очень люблю такой формат потому что
урлы получаются длиннее в 2 раза
наименования параметров просто не нужны, т.к. их можно задать позиционно
имена параметров в урлах выступают как ключи в SEO, что не всегда желательно
дополнительный вектор атаки через перебор возможных имён переменных
причём в урлах переменные обычно имеют такой смысл
в общем, суть в том, что первые сегменты указывают на метод, остальные сегменты означают какие-то данные. это значит, что обработка происходит в таком порядке:
урл сперва матчится по роутам,
бьётся на параметры
эти параметры передаются в метод
уже в этом методе обрабатываются, если нужно - проходят дополнительную проверку.
ты же пытаешься обработать их в другом порядке:
матчить урл по роутам И одновременно выполнить проверку
разбить по параметрам
передать в метод
а поскольку роуты в жанге построены на регулярках, то и решение п.1. ты ищешь целиком на регулярке
не всё полезно, что в swap полезло -
15 апреля 2015 г. 17:05, спустя 18 минут 42 секунды
если формат урла изменять не хочется, то я бы сделал просто
^typelist/(?P<types>[^/])/date/(?P<date>\d{4}-\d{2}-\d{2})$
и уже в методе сделал бы эксплод и проверку
не всё полезно, что в swap полезло -
15 апреля 2015 г. 17:08, спустя 3 минуты 3 секунды
@master, неплохая идея. я бы сделал примерно так же. если бы не реформировал юрл
Сапожник без сапог -
15 апреля 2015 г. 17:12, спустя 4 минуты 10 секунд
Фигня в том, что вот так
(?P<types>[^/])
я ловить не могу т.к. если тип один /photos/ нужен вызов одного метода, а если тип множественный /photos_videos/ нужно вызывать другой, который присобачит небольшую оберточку
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!