REGEXP_REPLACE反向引用

3

我已经查阅了有关Oracle的REGEXP_REPLACE函数的文档,但它并没有像预期的那样工作。

这是我得到的内容:


我的目标:为连续数字集合中的每个集合连接一个字符。

我的输入:

(1101 + 1102) * 1103 + 1104 + 1105

期望的输出结果:

(T1101 + T1102) * T1103 + T1104 + T1105

代码:

SELECT
  REGEXP_REPLACE('(1101 + 1102) * 1103 + 1104 + 1105',
                 '[0-9]+',
                 'T\1') "REZ"
  FROM DUAL;
我得到的结果:
(T\1 + T\1) * T\1 + T\1 + T\1

我搜索了许多Stack-overflow的帖子,它们似乎都没有关于\1的问题。

我还尝试了不同的地方来测试代码:Tod for oracle、SqlPlus和另一个应用程序,它们都给了我相同的结果。

那么,请问有谁能告诉我我的代码有什么问题吗?

注意:

我不怀疑我的正则表达式有任何问题,在oracle的不同场景中测试过,并且它是有效的。此外,已经找到了匹配项,但替换部分不起作用。

一些Stack-overflow帖子的参考:

Ref1Ref2Ref3

Oracle文档的参考:

REGEXP_REPLACE



2
你的正则表达式似乎没有一个组。尝试匹配([0-9]+) - Aserre
1
这并不会为已接受的答案增加任何新内容,所以我不会这么做。不过还是谢谢你提供投票的机会;) - Aserre
1个回答

6

\1 是一个反向引用,它用于查找之前匹配的分组,这些分组可以通过将其放在括号内(...)来捕获。

应该是这样的

([0-9]+)

1
很高兴能够帮到你。点击链接获取更多详细信息。你也可以使用 (\d+) - Braj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接