添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
开朗的硬盘  ·  Bootstrap下拉菜单 - ...·  1 年前    · 
不爱学习的钥匙扣  ·  Java Web - 知乎·  1 年前    · 
烦恼的凉面  ·  java - ...·  1 年前    · 

Redshift/正则表达式(负向查询)不工作

8 人关注

当我在redshift上使用负的lookahead(类似于 (?!abc) )。 redshift返回的错误是这样的。

-- Find records that do not start with abc
select * from table_a where column_a ~ '^(?!abc).+$'
  

错误。PG::InternalError:ERROR: Invalid preceding regular expression prior to repetition operator.这个错误是在解析正则表达式:'^(?>>HERE>>!abc).+$'时发生的。DETAIL: ----------------------------------------------- error:在重复运算符之前,前面的正则表达式无效。在解析正则表达式:'^(?>>>HERE>>>!abc).+$'时发生了错误。8002 上下文。T_regexp_init query:1039510 位置: funcs_expr.cpp:130

看起来Redshift并不承认负数的lookahead...
有什么办法可以让我在Redshift上使用它吗?

4 个评论
那么你的意图是什么呢?你需要匹配的是什么?一个不等于 abc 的字符串?Redshift regex风味是POSIX的,所以没有变通的方法。
sora
谢谢你的评论。 我更新了问题以表明我的意图。但是没有查找方法...?:(
所以,你想匹配任何不以 abc 开始的条目?试试 where column_a !~ '^abc' (不知道如何正确使用否定词)。
sora
在 regex 字符串(select * from table_a where column_a ~ )之前的所有内容都是硬编码的,所以我有点需要一种方法来否定表达式,而不需要 !~。但看了你的评论,我觉得使用 !~ 要容易得多。所以我会和写这段代码的工程师谈谈。再次感谢您!
regex
amazon-redshift
sora
sora
发布于 2016-12-08
1 个回答
Wiktor Stribiżew
Wiktor Stribiżew
发布于 2017-05-04
已采纳
0 人赞同

根据 Amazon Redshift文档 ,你可以使用 ~ 操作符的正则表达式符合POSIX标准。这意味着 没有查找支持 ,你不能在这些模式中使用 (?!...) ,也不能使用 (?<!...) 结构。