【发布时间】:2015-04-14 21:09:33
【问题描述】:
我正在尝试获取一个分隔字符串并返回分隔符之间的每个子字符串。这用于我正在编写的更大函数中,因此分隔符通常是一个变量。
我们使用的一个非常常见的分隔符是“,”,因此这是我的第一个测试用例。根据我在正则表达式中格式化分隔符的方式,我遇到了不同的问题。
以下是我尝试过的不同方法和结果:
select REGEXP_SUBSTR ('foo bar', '[^' || '(, )' || ']+', 1, LEVEL) item
from dual
connect by REGEXP_SUBSTR ('foo bar', '[^' || '(, )' || ']+', 1, LEVEL
select REGEXP_SUBSTR ('foo bar', '[^' || '(,\s)' || ']+', 1, LEVEL) item
from dual
connect by REGEXP_SUBSTR ('foo bar', '[^' || '(,\s)' || ']+', 1, LEVEL
select REGEXP_SUBSTR ('foo bar', '[^' || '(,[:blank:])' || ']+', 1, LEVEL) item
from dual
connect by REGEXP_SUBSTR ('foo bar', '[^' || '(,[:blank:])' || ']+', 1, LEVEL
第一次和第三次尝试将空格上的 'foo' 和 'bar' 分开,即使没有逗号。后一种尝试按希望将 'foo' 和 'bar' 保持在同一行,但如果字符串中有一个 s(例如 horse),则结果是 'hor' 'e'。
我对正则表达式和 regexp_substr 的理解告诉我
'[^(,\s)]+'
应该在遇到逗号和空格时分隔字符串。但显然这并没有发生。我还没有找到和我有类似问题的人。任何帮助将不胜感激
作为参考,我在 SQL Developer 中使用 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
【问题讨论】:
-
我不太明白你的问题,你为什么不改用
[^,[:blank:]]+? -
@Aramillo - 会在逗号 或 空格上分割,而不是两个相邻的字符对。 OP 使用括号将它们视为一个单元在匹配字符列表中不起作用。
-
@AlexPoole 啊,现在我明白了。谢谢!!
标签: sql regex oracle substring whitespace