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
我正在尝试使用单个 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