- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Сделал поиск в админке, добавил возможность пользователю искать совпадения в конкретных колонках таблицы с контентом, например он жмет на нужные кнопки и javascripto'm в строке поиска формируется подобное:
Рашифровка:
:name - это имя поля в таблице
&& и || - эквивалент AND и OR
скобки самособой понятно....
В итоге когда эта строка попадает на сервер, скрипт должен ее разбить и превратить в следующее,
будет строка такого вида:
И массив такого вида:
array('первая',40,'content')Как это сделать? я голову ломаю, не могу составить регулярку кот все сделает. Тут следует понять, что данные могут меняться, скобок может не быть или быть несколько, знаки использую только >,<,= покачто других не придумал, знак "=" заменяем на "LIKE ?". Помогите решить задачку пожалуйста? И хочу видеть ваши замечания, насколько это тупо..) p.s. но хочу сделать именно так)
Вы пытаетесь изобрести лексер. Их и юзайте.
Mad_Man, Первый раз о них слышу. Мне нужна строка такого вида: "name LIKE ? && (id> && sect LIKE ?)" - потому что я использую обёртку для PDO, которая из такой строки + массив делает запрос. Не знаю как прикрутить лексемы(
Грубый такой вариант. Если вам нужно разобрать полностью выражение пишите свой парсер с блэкджеком и девушками.
siv1987,siv1987, спасибо, протестил ваш вариантик, немного не так в результирующей строке:
name LIKE ? && (:id>40 && sect LIKE ?) - здесь вместо ":id>40" - должно быть просто "id>" и в массиве $param всего два элемента, а должно быть три и вторым должен быть параметр "40".
---------- Добавлено 08.01.2015 в 21:34 ----------
Пробовал такую строку исходную - :name=первая && :sect=abc - работает
но если в строке уже есть знак > и число то все работает не так
Например при такой исходной строке :name=первая && :sect>40 - результирующая выглядит так - name LIKE ? && :sect>40 и массив так:
array(1) {т.е. такой же косячок что и с первоначальным вариантом.[0]=>
string(12) "первая"
}
Конкретно на коде выше я смотрел и подобных проблем небыло. Да и по идее регулярка должна отработать как нужно. Проверяйте свой код.
siv1987, я запускал код, если попадается знак ">" - то отрабатывает не верно. Я выше описал результат тестирования - какую строку кормил и что на выдаче получил
Хз. Попробуйте чтоли экранировать эти символы в регулярным выражении.
siv1987, всеравно результат тот же(
---------- Добавлено 08.01.2015 в 23:19 ----------
вся соль в знаках > и <
не могу понять почему
http://sandbox.onlinephpfunctions.com/
siv1987, и правда все работает, извеняюсь, но почемуж в моем скрипте непашет как надо( ведь все тоже на входе