试图了解oracle REGEXP_REPLACE如何工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图了解oracle REGEXP_REPLACE如何工作相关的知识,希望对你有一定的参考价值。

需要帮助成为“REGEXP_REPLACE”的新手。

当我做

SELECT REGEXP_REPLACE('7ELEVEN USA','[(D^USA|^CANADA|^Canada)]','') "NAME" from dual

我得到7ELEVE,你可以看到最后一个角色N缺失了。

我想从下面替换第一个数字并显示7-ELEVEN STORE。

20991 7-ELEVEN STORE

任何帮助是极大的赞赏。

提前感谢

答案

我想从下面替换第一个数字并显示7-ELEVEN STORE。

20991 7-ELEVEN STORE

好吧,你甚至不需要正则表达式 - 好的,旧的SUBSTR + INSTR做得很好(那是RES2)。如果你想要regexp,那么这个模式:^d+就可以了 - 它说:

  • ^锚到字符串的开头
  • d+取所有数字(直到第一个非数字字符,这是空格)

一个例子:

SQL> with test (col) as
  2    (select '20991 7-ELEVEN STORE' from dual)
  3  select
  4    regexp_replace(col, '^d+') res1,
  5    substr(col, instr(col, ' ') + 1) res2
  6  from test;

RES1            RES2
--------------- --------------
 7-ELEVEN STORE 7-ELEVEN STORE

SQL>

[编辑]

截至你发布的第一个查询(我不明白这是问题):如果你想从该字符串中选择第一个“单词”,我不会使用REGEXP_REPLACE但是(REGEXP_SUBSTR

SQL> with test (col) as
  2    (select '7ELEVEN USA' from dual)
  3  select regexp_substr(col, 'w+') res1,
  4         substr(col, 1, instr(col, ' ') - 1) res2
  5  from test;

RES1    RES2
------- -------
7ELEVEN 7ELEVEN

SQL>

以上是关于试图了解oracle REGEXP_REPLACE如何工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 中使用 REGEXP_REPLACE 删除单词

Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]

oracle 的 regexp_replace 替换 https 不起作用

关于 Oracle Regexp_Replace

如何在 edb 中使用相同的 REGEXP_REPLACE(Oracle sql)

oracle 使用 REGEXP_REPLACE 函数替换子字符