我正在尝试在 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/