【问题标题】:Redshift / Regular Expression (Negative Lookahead) does not workRedshift / 正则表达式(负前瞻)不起作用
【发布时间】:2017-04-22 16:21:52
【问题描述】:

当我在红移上使用负前瞻(类似(?!abc))时, redshift 返回如下错误:

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

错误:PG::InternalError:错误:重复运算符之前的正则表达式无效。解析正则表达式时发生错误:'^(?>>>HERE>>>!abc).+$'。详细信息:---------------------------------------------错误: 重复运算符之前的正则表达式无效。解析正则表达式时发生错误:'^(?>>>HERE>>>!abc).+$'。代码:8002 上下文:T_regexp_init 查询:1039510 位置:funcs_expr.cpp:130

Redshift 似乎无法识别负前瞻...
有什么办法可以在 Redshift 上使用它吗?

【问题讨论】:

  • 你的意图是什么?你需要匹配什么?字符串不等于abc? Redshift 正则表达式风格是 POSIX,因此没有可用的环视。
  • 感谢您的评论。我更新了问题以表明我的意图。但是没有可用的环视...? :(
  • 那么,您想匹配任何不以abc 开头的条目吗?试试where column_a !~ '^abc'(虽然不知道如何正确使用否定)
  • 正则表达式字符串之前的所有内容(select * from table_a where column_a ~)都被硬编码到另一个系统,所以我有点需要一种方法来否定没有!~的表达式。但是看看你的cmets,我觉得它更容易使用!~。因此,我将与编写该代码的工程师交谈。再次感谢!

标签: regex amazon-redshift


【解决方案1】:

累加。对于Amazon Redshift documentation,您可以与~ 运算符一起使用的正则表达式符合POSIX 标准。这意味着没有环视支持,您不能在这些模式中使用 (?!...)(?<!...) 构造。

如果字符串不以模式开头,您似乎想要匹配它。在这种情况下,您可以使用 negated 正则表达式运算符版本,!~

where column_a !~ '^abc'

【讨论】:

猜你喜欢
  • 2011-07-21
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
  • 2011-10-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多