Oracle REGEXP_SUBSTR 匹配由换行符“\n”分隔的单词

Oracle REGEXP_SUBSTR match words delimited by newline "\n"

我正在尝试使用单个 SELECT 查询通过换行符“\n”拆分 Oracle 10g 中的字符串“SMITH\nALLEN\WARD\nJONES”。请帮助我为此找到确切的正则表达式。

预期输出:

1 SMITH
2 ALLEN\WARD
3 JONES

我试过表达式“[^\n]+”,但我得到了以下结果,也考虑了“\”。我希望表达式只考虑 "\n".

查询:

    SELECT   REGEXP_SUBSTR ('SMITH\nALLEN\WARD\nJONES',
                            '[^\n]+',
                            1,
                            LEVEL)
      FROM   DUAL
CONNECT BY   REGEXP_SUBSTR ('SMITH\nALLEN\WARD\nJONES',
                            '[^\n]+',
                            1,
                            LEVEL) IS NOT NULL;

结果:

1 SMITH
2 ALLEN
3 WARD 
4 JONES

[] 中,字符是单独匹配的,并且 \n 不是特殊字符,甚至是 运行 字符 - 它单独匹配这些字符中的任何一个;所以即使更改为 [^\n] 也无济于事。

你可以使用这种形式,它也returns空元素:

select regexp_substr('SMITH\nALLEN\WARD\nJONES', '(.*?)(\n|$)', 1, level, 'm', 1)
from dual
connect by level <= regexp_count('SMITH\nALLEN\WARD\nJONES', '\n') + 1;

REGEXP_SUBSTR('SMITH\NAL
------------------------
SMITH
ALLEN\WARD
JONES