Redshift POSIX正则表达式顺序无关紧要

时间:2018-12-27 19:44:57

标签: regex posix amazon-redshift

我正在使用POSIX正则表达式从AWS Redshift查询数据。但是,我很难通过查找多个单词而不考虑顺序来查找整个字符串。

表格如下:

ID  | full_term 
123 | juice apple farm
123 | apple juice original
123 | banana juice

例如,我正在寻找同时包含applejuice的整个字符串,因此我希望获得前两行。我当前的查询:

SELECT full_term FROM data_table
WHERE full_term ~ '(.*apple+)(.*juice+).*$'

但是,顺序在此方法中很重要。我也尝试了full_term ~ '(?=.*apple+)(?=.*juice+).*$',但收到一条错误消息[Amazon](500310) Invalid operation: Invalid preceding regular expression prior to repetition operator. The error occurred while parsing the regular expression fragment: '(?>>>HERE>>>=.*apple+)'.,我刚刚发现?=在Redshift中不起作用。

在这种情况下,使用UDF是唯一的解决方案吗? 另外,我只想要完整的applejuice。也就是说,不应包含pineapple

1 个答案:

答案 0 :(得分:1)

这可能最清楚地写为AND版本的独立正则表达式匹配项。为了确保您不匹配,例如pineapple在寻找apple时,您需要检查搜索词的两边是否是空格字符或行的开头/结尾:

SELECT full_term FROM data_table
WHERE full_term ~ '(^|\\s)apple(\\s|$)'
  AND full_term ~ '(^|\\s)juice(\\s|$)'