postgresql posix regexp

时间:2017-02-21 15:32:55

标签: regex postgresql posix

我有以下几行数据:

  

登录; visit_homepage;买

     

寄存器;登录;购买; visit_homepage

我希望匹配所有具有登录事件后跟buy事件的行。登录和购买活动之间可能还有其他一些事件。购买可以是最后一次活动,登录可以是第一次活动。我需要完全匹配登录并购买不是通配符。

我试过这个:

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

但我认为并未涵盖所有情况。

由于

2 个答案:

答案 0 :(得分:2)

此正则表达式应与行匹配:

\mlogin\M.*?\mbuy\M

它会搜索单词login,然后搜索buy

  • \m匹配单词的开头
  • \M匹配单词的结尾

使用边界可防止匹配组成单词的loginbuy(例如foologin)。

有关PostgreSQL here中这些POSIX转义的更多信息。

答案 1 :(得分:0)

尝试使用此正则表达式选择两行

login;.*buy.*$login.*buy.*$

您可以查看演示here

或者您可以使用login.*buy

进一步简化它