我正在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)]'