regexp_replace的困难

时间:2019-02-22 06:52:22

标签: regex oracle regexp-replace

我想从12.1.0.2.170117获得PSU 12.1.0.2.170117。模式([\d|\.]+)似乎可以正常工作:https://regex101.com/r/bDCF0w/1

但是,它不能在Oracle的regexp_replace:http://sqlfiddle.com/#!4/53d64e/77中正常工作。我想念什么吗?当我只有PSU\d时,为什么还返回\。在我的表情中?

我的文字也应该是PSU SOMTHING SOMTHING 12.1.0.2.170117 AND HERE SOME. 我的最终目标是也阅读前3个点。

2 个答案:

答案 0 :(得分:4)

这两个选项怎么样:

SQL> with test (col) as (select 'PSU 12.1.0.2.170117' from dual)
  2  select regexp_substr(col, '\d+.+') result1,
  3         substr(col, instr(col, ' ') + 1) result2
  4  from test;

RESULT1         RESULT2
--------------- ---------------
12.1.0.2.170117 12.1.0.2.170117

SQL>

[编辑]

嗯,你应该这么说。这是另一个选择-删除字符串中既不是数字也不是点的部分:

SQL> with test (col) as
  2    (select 'PSU 12.1.0.2.170117' from dual union all
  3     select 'PSU SOMTHING SOMTHING 12.1.0.2.170117 AND HERE SOME' from dual
  4    )
  5  select regexp_replace(col, '[^[:digit:].]')
  6  from test;

REGEXP_REPLACE(COL,'[^[:DIGIT:].]')
---------------------------------------------------
12.1.0.2.170117
12.1.0.2.170117

SQL>

答案 1 :(得分:4)

这是使用instanceState和 捕获组:

REGEXP_REPLACE

以上方法是隔离并捕获任意数量的点或数字。