【问题标题】:Replacing last occurrence of character group with Oracle REGEXP_REPLACE用 Oracle REGEXP_REPLACE 替换最后出现的字符组
【发布时间】:2017-12-07 14:22:55
【问题描述】:

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

ABCDEF000xyz12345abcdefgh

GHIJK0000def67890abcdefgh

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

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

【问题讨论】:

  • 您尝试过以下任何建议吗?如果是,什么还在阻塞?

标签: regex oracle11g


【解决方案1】:

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

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

在哪里

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

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

请参阅online demo

【讨论】:

    【解决方案2】:
    select regexp_replace(column_name,'(.*)([0]{2,})(.*)','\1\2xxxx') from table_name;
    

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2015-12-09
      • 2021-12-29
      • 2012-09-25
      • 2015-03-12
      • 2017-09-17
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      相关资源
      最近更新 更多