首页 > 解决方案 > Oracle REGEXP_SUBSTR 匹配由换行符“\n”分隔的单词

问题描述

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

预期输出:

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

标签: oracleregexp-substr

解决方案


[]这些字符中,字符是单独匹配的,\n无论如何都看不到特殊字符甚至是一系列字符 - 它单独匹配这些字符中的任何一个;所以即使更改为[^\\n]也无济于事。

您可以使用此表单,它也返回空元素:

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

推荐阅读