Oracle sql REGEXP_REPLACE 表达式替换匹配模式的字符串中的数字

Oracle sql REGEXP_REPLACE expression to replace a number in a string matching a pattern

我有一个字符串'ABC.1.2.3' 我想用1代替中间的数字。

Input 'ABC.1.2.3'
Output 'ABC.1.1.3'

Input 'XYZ.2.2.1'
Output 'XYZ.2.1.1'

也就是说,替换第二次出现“.”后的数字与 1.

我知道我的模式是错误的,我现在的sql是:

select REGEXP_REPLACE ('ABC.1.2.8', '(\.)', '.1.') from dual;

你可以使用

^([^.]*\.[^.]*\.)\d+(.*)

参见a demo on regex101.com


这是:

^                # start of the string
([^.]*\.[^.]*\.) # capture anything including the second dot
\d+              # 1+ digits
(.*)             # the rest of the string up to the end

这被替换为


稍后您可以使用捕获组来引用替换字符串中周围的数字:

select REGEXP_REPLACE ('ABC.1.2.8', '([0-9])\.[0-9]+\.([0-9])', '.1.') from dual;