regex - 如何使用正则表达式拆分字符串,使用字符串作为分隔符?

标签 regex oracle regexp-substr

我正在尝试在 Oracle 存储过程中使用字符串作为分隔符来拆分字符串。我可以轻松地使用 instr,但我正在尝试学习如何使用正则表达式执行此操作,因为我知道它功能强大且高效。

在阅读了一些文章后,我认为我可以这样做(预期结果是“Hello”):

select regexp_substr('Hello My Delimiter World', '( My Delimiter )+', 1, 1)
from dual

结果:

My Delimiter

和(预期结果是“World”):

  select regexp_substr('Hello My Delimiter World', '( My Delimiter )+', 1, 2)
    from dual

结果:

null

此要求的正确 regex_substr 是什么?

编辑:我正在寻找类似下面的内容。在一次传递中,它选择字符串中的子字符串:

例如select regexp_substr('Hello World', '[^ ]+', 1, 2) from dual 但此示例仅适用于单个字符。

最佳答案

试试这些方法。

这会获取您最初要求的第一个元素:

SQL> with tbl(str) as (
      select 'Hello My Delimiter World' from dual
    )
    SELECT REGEXP_SUBSTR( str ,'(.*?)( My Delimiter |$)', 1, 1, NULL, 1 ) AS element
    FROM   tbl;

ELEME
-----
Hello

此版本解析整个字符串。添加 NULL 元素以显示它可以处理缺少的元素:

SQL> with tbl(str) as (
      select ' My Delimiter Hello My Delimiter World My Delimiter  My Delimiter test My Delimiter ' from dual
    )
    SELECT LEVEL AS element,
    REGEXP_SUBSTR( str ,'(.*?)( My Delimiter |$)', 1, LEVEL, NULL, 1 ) AS element_value
    FROM   tbl
    CONNECT BY LEVEL <= regexp_count(str, ' My Delimiter ')+1;

   ELEMENT ELEMENT_VALUE
---------- --------------------
         1
         2 Hello
         3 World
         4
         5 test
         6

6 rows selected.

关于regex - 如何使用正则表达式拆分字符串,使用字符串作为分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30704195/

相关文章:

regex - 用于域提取的 Redshift 正则表达式

regex - 设置 $/="\R"会允许 chomp() 与 perl 中的大多数文件一起正常工作吗?

c# - 只匹配c#字符串中的正则表达式

sql - Oracle 中删除对象后权限丢失

sql - 有没有办法在oracle sql中使用varchar2字符串的一部分作为主键?

java - Jasypt 的 propertyProviderClass 自定义实现不起作用

javascript - 用同一行开头的匹配项替换一行中的所有斜杠

sql - 在 sql select 查询中使用分隔符重新排列字符串值

regex - sparql 精确匹配正则表达式

php - 通过 PHP 执行的 REGEXP 的奇怪 MySQL 结果集