首页 > 解决方案 > 红移上的正则表达式匹配

问题描述

我在redshift上的正则表达式没有什么问题。当我在我的 scala 代码中使用它时,正则表达式工作正常,但不适用于红移。我知道红移的语法可能有所不同。有谁可以帮我离开这里吗。

正则表达式:(^VISA\s*MONEY\s*TRANSFER\s*.*\s*CASH\s*APP\**\s*.*Visa Direct CA.*\s*)

在红移中:

select *
from table where column ~ '(^VISA\s*MONEY\s*TRANSFER\s*.*\s*CASH\s*APP\**\s*.*Visa Direct CA.*\s*)' limit 2;

呃:

错误:XX000:重复运算符之前的正则表达式无效。解析正则表达式片段时出错:'ASHs*APP**>>>HERE>>>s*.*Visa D'。

标签: regexamazon-redshift

解决方案


错误的原因在于'APP\**':由于您没有使用文字反斜杠,而是转义符号,因此在字符串转义序列的非预期第二个字符前面,反斜杠被引擎删除,并且生成的APP**模式导致异常,因为量词本身无法量化。

您可以使用

select * from table where column ~ '^VISA\\s*MONEY\\s*TRANSFER.*CASH\\s*APP.*Visa Direct CA.*' limit 2;

我删除了一些多余的模式,并正确地转义了反斜杠。要输入文字反斜杠,您需要在字符串文字中将其加倍。


推荐阅读