正则表达式匹配精确的数字长度

时间:2017-03-17 17:15:38

标签: regex oracle regexp-replace

我想替换字符串中完全数量的连续数字,这意味着我不希望它替换属于较长数字序列的出现次数。

例如:

select regexp_replace('filename07_20160723', '[0-9]{2}', '') from dual

返回

filename_

但我希望它返回

filename_20160723

如何仅替换单独的'07'(两边都有非数字字符)?

1 个答案:

答案 0 :(得分:0)

因为oracle不支持环顾四周,要替换完全 2位数(任何一边都没有数字),要么捕获非数字并将它们放回去:

regexp_replace('filename07_20160723', '(\D)\d\d(\D)', '\1\2')

注意:作为@mathguy points out,任意一方都会使用非数字字符,因此他们无法参与其他匹配。这具有以下效果:

x33y44z -> xy44z not xyz

因为'y'无法再次参与以允许第二个数字对匹配。