Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: И опять регулярочка... [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Без описания
armancho7777777 Супермодератор
Отправлено: 10 Апреля, 2013 - 08:27:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Всё, добил шаблон.
Можно не использовать ковычки тоже.
PHP:
скопировать код в буфер обмена
  1.  
  2. $pattern = '~' .
  3.            '(`?)(?P<field>[\w\d_]+)(\1)\s*' .
  4.            '(?P<cond>[!=|>|<]{1,2})\s*' .
  5.            '((?P<value>[\d.]+)|' .
  6.            '((["|\']?)(?P<value2>.*?)(\8)))' .
  7.            '(?=[\s\)\(]*(((AND|OR)[\s\)\(]*([\w\d_]+\.)?(`?)[\w\d_]+(\15)\s*[!=|>|<]{1,2})|$))' .
  8.            '~i';
  9.  
  10. $sql = "((`test1` = red end blue or OR t1.test2 != red 'or blue) AND (`test2` < 1.1 OR test2 > 2.2)) AND test3 = 3.3";
  11.  

(Отредактировано автором: 10 Апреля, 2013 - 09:08:24)

 
 Top
nerv
Отправлено: 12 Апреля, 2013 - 10:36:14
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




я не великий знаток сиквела, но разве не может это

например, быть записано так

?


-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
LIME
Отправлено: 12 Апреля, 2013 - 11:45:34
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




nerv что? зачем?
непонятно
 
 Top
armancho7777777 Супермодератор
Отправлено: 12 Апреля, 2013 - 13:34:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




nerv, Вам лишь бы что-нибудь написать?
Хотя бы читали посты повнимательнее, что ли.
nerv пишет:
например, быть записано так

armancho7777777 пишет:
t1.test2 != red 'or blue

(Добавление)
И не , а
 
 Top
nerv
Отправлено: 12 Апреля, 2013 - 13:57:09
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




armancho7777777 пишет:
Вам лишь бы что-нибудь написать?

приведи хотя бы один пост, где
armancho7777777 пишет:
лишь бы что-нибудь написать


твоя регулярка не отрабатывает этот случай (насколько я понял)
CODE (SQL):
скопировать код в буфер обмена
  1. ((t1.`test1`="red end blue" OR `test2`>"red 'or blue") AND (`test2`<1.1 OR `test2`=2.2)) AND `test3`=3.3


armancho7777777 пишет:
И не

да, ошибся

а вообще, я достаточно лоялен (сегодня) Закатив глазки . Я же не стал указывать что

в \w входит и \d и _ Улыбка

(Отредактировано автором: 12 Апреля, 2013 - 14:07:51)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
armancho7777777 Супермодератор
Отправлено: 12 Апреля, 2013 - 14:37:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




nerv пишет:
приведи хотя бы один пост, где

Да любой, даже в этой теме.
nerv пишет:
твоя регулярка не отрабатывает этот случай (насколько я понял)

Прекрасно отрабатывает.
nerv пишет:

Я же не стал указывать что [\w\d_] в \w входит и \d и _

Всего лишь опечаток, что не влияет на решение поставленной задачи )
Написали бы что-то по существу, а именно:
armancho7777777 пишет:
Просьба к коллегам, если не лень, протестируйте у себя пожалуйста с различными sql строками.

А если лень так пройдите мимо, чем пиСать что в голову придёт...

(Отредактировано автором: 17 Апреля, 2013 - 05:42:39)

 
 Top
nerv
Отправлено: 12 Апреля, 2013 - 16:03:15
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




armancho7777777 пишет:
Прекрасно отрабатывает.

т.е. это

так и должно быть, и ничего, что забыли таблицу? Ниндзя

armancho7777777 пишет:
чем пиСать что в голову придёт

я все мысли через голову пропускаю, по другому не умею )

nerv пишет:
я все мысли через голову пропускаю

ну, почти все Ха-ха

(Отредактировано автором: 12 Апреля, 2013 - 16:04:18)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
armancho7777777 Супермодератор
Отправлено: 12 Апреля, 2013 - 16:13:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




nerv пишет:
так и должно быть, и ничего, что забыли таблицу?

nerv, t1 - есть псевдоним таблицы.
Это часть sql запроса, которая идёт после SQL команды "WHERE" и которую надо обработать регуляркой.
Я реализовываю мини ORM (больше из академического интереса)
для использования в небольших проектах.
Данная часть запроса будет значением аргумента php - метода "where".
Чтобы было более понятно, покажу целиком пример самого запрос:

PHP:
скопировать код в буфер обмена
  1.  
  2. $select = DB::select('r.name, r.description, p.id id_price, p.id_room, p.period, p.price')
  3.             ->from('rooms r')
  4.             ->where('p.period < 24 AND p.period > 3')  // <--
  5.             ->limit(1, 10)
  6.             ->leftJoin('prices p', 'p.id_room = r.id')
  7.             ->groupBy('r.name')
  8.             ->orderBy('r.name, r.description DESC');
  9.  
  10. $select->fetch_all(DB::FETCH_ASSOC); // Или
  11. $select->fetch_assoc(); // Или
  12. $select->result()->fetch_assoc(); // Или
  13.  

(Отредактировано автором: 12 Апреля, 2013 - 16:32:57)

 
 Top
nerv
Отправлено: 16 Апреля, 2013 - 01:51:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




armancho7777777 пишет:
t1 - есть псевдоним таблицы

спасибо, я знаю. Выше ошибся, т.к. практики со скулем на данный момент мало.

armancho7777777 пишет:
$select = DB::select('r.name, r.description, p.id id_price, p.id_room, p.period, p.price')
            ->from('rooms r')
            ->where('p.period < 24 AND p.period > 3')  // <--
            ->limit(1, 10)
            ->leftJoin('prices p', 'p.id_room = r.id')
            ->groupBy('r.name')
            ->orderBy('r.name, r.description DESC');

прям, жуквери Улыбка

armancho7777777 пишет:
Я реализовываю мини ORM

не знаю что это такое. Гуглить в данный момент лениво.

armancho7777777 пишет:
Данная часть запроса будет значением аргумента php - метода "where".

тогда зачем так сложно?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT([^не содержит FROM]+)FROM ... etc.


-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
LIME
Отправлено: 16 Апреля, 2013 - 01:57:54
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




nerv а как ты из символьного класса соорудишь отрицание FROM ?
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Апреля, 2013 - 03:07:04
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




nerv пишет:
тогда зачем так сложно?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT([^не содержит FROM]+)FROM ... etc.

FROM непричём.
armancho7777777 пишет:
Это часть sql запроса, которая идёт после SQL команды "WHERE"
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Апреля, 2013 - 07:37:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




nerv пишет:
[^не содержит FROM]

И между прочим, это будет 4 последовательных символа "F" "R" "O" "M" которое может содержать любое слово.
LIME пишет:
nerv а как ты из символьного класса соорудишь отрицание FROM ?

Можно так (если я Вас правильно понял):
(?!(FROM))(.*?)
или так
(.*?)(?=(FROM))
но там ключевые слова подставляются при формировании запроса.
Потому (и не только) методы можно вызывать без соблюдения порядка, кроме конечно последних, которые формируют результат:
armancho7777777 пишет:

PHP:
скопировать код в буфер обмена
  1.  
  2. $select->fetch_all(DB::FETCH_ASSOC); // Или
  3. $select->fetch_assoc(); // Или
  4. $select->result()->fetch_assoc(); // Или
  5.  

(Отредактировано автором: 16 Апреля, 2013 - 07:39:50)

 
 Top
esterio
Отправлено: 16 Апреля, 2013 - 10:42:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




armancho7777777
Вы потом выложите свою ORM?
 
 Top
LIME
Отправлено: 16 Апреля, 2013 - 13:28:03
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




armancho7777777 пишет:
если я Вас правильно понял
неправильно
символьный класс это []
 
 Top
nerv
Отправлено: 16 Апреля, 2013 - 15:56:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 407
Дата рег-ции: Февр. 2013  
Откуда: Россия


Помог: 9 раз(а)




armancho7777777 пишет:
правильно

LIME пишет:
неправильно

устроили тут ромашку, понимаешь Ха-ха

Это был псевдо код как бы )

(Отредактировано автором: 16 Апреля, 2013 - 15:57:16)



-----
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB