regexp_replace 的困难
Difficulties with regexp_replace
我想从 PSU 12.1.0.2.170117
得到 12.1.0.2.170117
。模式 ([\d|\.]+)
似乎工作正常:https://regex101.com/r/bDCF0w/1
但是,它在 Oracle regexp_replace 中没有像预期的那样工作:http://sqlfiddle.com/#!4/53d64e/77。我想念什么吗?为什么它也 return PSU
,而我只有 \d
和 \
。在我的表情中?
我的文字也可以是 PSU SOMTHING SOMTHING 12.1.0.2.170117 AND HERE SOME.
我的最终目标也是阅读前 3 个点。
这两个选项如何:
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>
这是使用 REGEXP_REPLACE
和
捕获组:
SELECT
REGEXP_REPLACE('PSU 12.1.0.2.170117', '^.*?([0-9.]+).*$', '')
FROM dual;
上述方法是分离和捕获任意数量的点或数字。
我想从 PSU 12.1.0.2.170117
得到 12.1.0.2.170117
。模式 ([\d|\.]+)
似乎工作正常:https://regex101.com/r/bDCF0w/1
但是,它在 Oracle regexp_replace 中没有像预期的那样工作:http://sqlfiddle.com/#!4/53d64e/77。我想念什么吗?为什么它也 return PSU
,而我只有 \d
和 \
。在我的表情中?
我的文字也可以是 PSU SOMTHING SOMTHING 12.1.0.2.170117 AND HERE SOME.
我的最终目标也是阅读前 3 个点。
这两个选项如何:
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>
这是使用 REGEXP_REPLACE
和
捕获组:
SELECT
REGEXP_REPLACE('PSU 12.1.0.2.170117', '^.*?([0-9.]+).*$', '')
FROM dual;
上述方法是分离和捕获任意数量的点或数字。