用Oracle REGEXP_REPLACE替换最后一次出现的字符组

时间:2017-07-04 08:10:07

标签: regex oracle11g

我的Oracle 11g表中有以下字符串:

ABCDEF000xyz12345abcdefgh

GHIJK0000def67890abcdefgh

即,字符串以大写字母开头,后跟一系列零,后跟三个字符,数字和字符。

如何使用Oracle中的REGEXP_REPLACE将xyz12345abcdefghdef67890abcdefgh替换为某个字符串?

2 个答案:

答案 0 :(得分:1)

select regexp_replace(column_name,'(.*)([0]{2,})(.*)','\1\2xxxx') from table_name;

答案 1 :(得分:1)

如果您只需要选择所提及类型的记录,请考虑使用

select REGEXP_REPLACE(col, '^([[:upper:]]+0+)[[:alpha:]]{3}\d+[[:alpha:]]+$', '\1NEW_STRING')

,其中

  • ^ - 字符串的开头
  • ([[:upper:]]+0+) - 捕获第1组匹配:
    • [[:upper:]]+ - 一个或多个大写字母
    • 0+ - 一个或多个0字符
  • [[:alpha:]]{3} - 3个字母字符
  • \d+ - 一位或多位
  • [[:alpha:]]+ - 1个或多个字母字符
  • $ - 字符串结束。

替换字符串中的\1反向引用,它插入存储在捕获组#1缓冲区中的值。

enter image description here

请参阅online demo