2017-02-21 27 views
0

У меня есть следующие строки данных:PostgreSQL POSIX регулярных выражений

входа в систему; visit_homepage, купить

регистр, войдите, купить, visit_homepage

Я хочу, чтобы соответствовать все строки, которые имеют событие входа, а затем событие покупки. Могут быть некоторые другие события между событиями входа и покупки. Покупка может быть последним событием, и вход в систему может быть первым событием. Мне нужно точное совпадение с логином и купить не подстановочный знак.

Я попытался это:

SELECT * FROM events WHERE events_list ~ 'login;.*buy;?.*$';

, но я думаю, что это не распространяется на все случаи.

Благодаря

+0

Вы пробовали что-нибудь? – Niitaku

+0

Включите то, что вы пробовали –

+0

Я пробовал: SELECT * FROM events WHERE events_list ~ 'login;. * Buy;? * * $'; –

ответ

0

Попробуйте это регулярное выражение для выбора как строки

login;.*buy.*$ или login.*buy.*$

вы можете проверить демо here

Или вы можете упростить его еще больше с помощью login.*buy

+0

он не будет работать правильно, потому что. * Будет соответствовать чему-либо до и после покупки. –

+0

** Я хочу сопоставить все строки, в которых есть событие входа, а затем событие покупки. **. это ваше требование. мой ответ соответствует всем строкам, содержащим список событий, в котором есть 'login', а затем' buy'. я не понимаю, где это происходит. Пожалуйста, предоставьте больше тестовых примеров на входном выходе и совпадение, которое вам нужно –

2

Это регулярное выражение должно соответствовать строкам:

\mlogin\M.*?\mbuy\M 

Он ищет слово login следуют позже buy.

  • \m совпадает с началом слова
  • \M соответствует концу слова

Использование границ предотвращает сопоставления login или buy, что сочиняет слово (напр. foologin).

Дополнительная информация об этих экранах POSIX в PostgreSQL here.

+1

лучше, чем у меня, чтобы избежать случаев «foologin». Еще одна хорошая практика. –