REGEXP_REPLACE不替换新字符

时间:2019-11-19 02:57:22

标签: sql regex exasolution exasol

我需要替换所有未在换行符后加冒号的实例。这是因为冒号表示新记录的开始(一条记录可能跨越多行)。

REGEXP_REPLACE(raw,'(\n[^:])','this is a test')

例如,输入以下内容:

:[MY DATA HERE]
[rest of record printed here]

产生输出:

:[MY DATA HERE]
this is a testrest of record printed here]

代替:

:[MY DATA HERE]this is a test[rest of record printed here]

请注意,当前输出将替换第一个非':'字符,但不会替换新行。有谁知道为什么这没有按预期进行?

预先感谢

1 个答案:

答案 0 :(得分:1)

您要替换换行符及其后的字符。您需要捕获其后的字符,并将其放入替换中。您可以使用\number

引用捕获组
REGEXP_REPLACE(raw,'\n([^:])','this is a test\1')

请参见documentation

Exasol还支持PCRE,因此您应该可以使用负前瞻:

REPLACE_REGEXP(raw, '\n(?!:)', 'this is a test')

它们之间的细微差别在于:您的regexp不会在字符串末尾匹配换行符,因为那里没有匹配[^:]的内容。负前瞻将在末尾匹配。