很抱歉在这里提出这个问题。但我在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,})')
答案 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或更多要跟随)。