Oracle正则表达式替换未按预期工作

Oracle正则表达式替换未按预期工作,oracle,Oracle,我有以下SQL查询(Oracle 18c): 我想做的是用新字符串替换所有选项卡、返回框和新行指示器,但似乎regexp replace不起作用(返回初始文本)。我真的很抱歉格式化,但我需要使用\r\n\t混合字符以如上所述的精确格式处理文本 这是小提琴: 我现在正在学习Oracle,不明白为什么第二个和第三个解决方案返回初始文本。第一个解决方案似乎有效,但我希望在第二个和第三个解决方案中实现相同的效果。我错过了什么?您可以使用与translate类似的格式尝试下面的内容 select r

我有以下SQL查询(Oracle 18c):

我想做的是用新字符串替换所有选项卡、返回框和新行指示器,但似乎regexp replace不起作用(返回初始文本)。我真的很抱歉格式化,但我需要使用
\r\n\t
混合字符以如上所述的精确格式处理文本

这是小提琴:


我现在正在学习Oracle,不明白为什么第二个和第三个解决方案返回初始文本。第一个解决方案似乎有效,但我希望在
第二个
第三个
解决方案中实现相同的效果。我错过了什么?

您可以使用与translate类似的格式尝试下面的内容

  select  regexp_replace(
   ' sOmE tEsT


               eNdOfLiNe',
    chr(10)||'|'||chr(11)||'|'||chr(13), 'replText') "Result3"
    FROM dual

我很确定Oracle不允许在字符类中使用转义序列。我相信这是你必须做的。在回应你对另一个答案的评论时,正如你所了解的,regex绝对不是regex。特别是Oracle的实现

编辑以解释正则表达式:正则表达式模式正在构建一个包含3个字符的正则表达式字符类的字符串,因此需要连接。在正则表达式中不能只包含转义字符,因为正则表达式会将这些字符作为字符类模式本身的一部分

SELECT REGEXP_REPLACE(
' sOmE tEsT


                       eNdOfLiNe', '['||CHR(9)||CHR(10)||CHR(13)||']', 'X') Result3
FROM dual;

RESULT3                       
------------------------------
 sOmE tEsTXXXXXXXX   eNdOfLiNe
1 row selected.

当然可以,但是如果某些正则表达式的示例发布在Oracle文档页面上,为什么正则表达式不起作用?您能否提供指向Oracle文档的链接,其中提到了换行正则表达式这里没有明确的
\r\n\t
示例,但正则表达式是正确的?在web f.e.@AdamMrozek中有一些例子,上面链接中提到的例子不起作用(至少在11g上),即使在修复了打字错误(删除后引号)。如果REGEXP_REPLACE()无法将regex与输入字符串匹配,则返回输入字符串。注意,这与REGEXP_SUBSTR()相反,在REGEXP_SUBSTR()中,如果未找到匹配项,则返回NULL。
SELECT REGEXP_REPLACE(
' sOmE tEsT


                       eNdOfLiNe', '['||CHR(9)||CHR(10)||CHR(13)||']', 'X') Result3
FROM dual;

RESULT3                       
------------------------------
 sOmE tEsTXXXXXXXX   eNdOfLiNe
1 row selected.