我正在p_value
使用分割一个字符串p_delimeter
,它可能包含一个或多个符号(这就是为什么 regexp 不像经常使用的那样[^,]+
)。
在大多数情况下,以下查询可以预期地工作,但我对以下情况感到茫然:
- 字符串
p_value
包含换行符chr(10)
, p_value
不包含p_delimeter
作为子字符串,
所以我希望得到一排p_value
作为结果的整体,但在换行后只得到剩余的。
这里假设正则表达式将换行符视为普通符号,因为'm'
在调用regexp_substr
.
请解释一下这种行为是否正确以及如何获得预期的结果。
WITH
params AS (SELECT 'ab' || chr(10) || 'cd' p_value,
'xxx' p_delimeter
FROM dual
)
SELECT regexp_substr(p_value, '(.*?)(' || p_delimeter || '|$)', 1, level, 'c', 1) AS CUT
FROM params
CONNECT BY regexp_substr(p_value, '(.*?)(' || p_delimeter || '|$)', 1, level, 'c', 1) IS NOT NULL;
Actual result: Expected result:
----- ------
CUT CUT
----- ------
cd ab/cd
^
'this is just a marker for a line break [= chr(10)]'