重复POSIX量词在Amazon Redshift中不起作用

时间:2018-04-27 06:59:03

标签: regex amazon-redshift

很抱歉在这里提出这个问题。但我在stackoverflow / google上找不到类似的东西。如果有现有文档,请重新指导我。

我正在尝试使用正则表达式使用以下语法匹配字符串:

select regexp_substr('2018-09-90 88:88:90:900 -0900','([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*:[0-9]* (\\+|-)[0-9]*)')

它完美无缺,我得到了一个输出:

2018-09-90 88:88:90:900 -0900

但使用{}代替*会返回null

select regexp_substr('2018-09-90 88:88:90:900 -0900','([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*:[0-9]* (\\+|-)[0-9][0-9]{2,})')

1 个答案:

答案 0 :(得分:1)

您确认[0-9]{2,}[0-9]\{2,\}都不适合您。

这意味着,您的正则表达式库不支持它,或者它已损坏。

要解决此问题,您可以使用REPEAT函数重复一个模式:

[0-9]{m}    = REPEAT('[0-9]', m)
[0-9]{m,}   = REPEAT('[0-9]', m) || '[0-9]*'
[0-9]{m,n}  = REPEAT('[0-9]', m) || CONCAT(REPEAT('[0-9]?', n-m))

您的模式可以轻松地重写为

'([0-9]*-[0-9]*-[0-9]* [0-9]*:[0-9]*:[0-9]*:[0-9]* [+-][0-9][0-9][0-9][0-9]*)'

其中[0-9]{2,}[0-9][0-9][0-9]*替换(2个必须为数字,0或更多要跟随)。