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

时间:2018-03-13 10:38:05

标签: sql regex oracle regexp-replace

我有一个字符串'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;

2 个答案:

答案 0 :(得分:1)

您可以使用

^([^.]*\.[^.]*\.)\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

取而代之的是

$11$2

答案 1 :(得分:1)

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

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