Отстраняване на този метод за разделяне на низ, като се допускат нулеви стойности:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, level, null, 1) from dual
connect by level < regexp_count('A~^B~^C~D^E','(.*?)(~\^|$)');
REGEXP_SUBS
-----------
A
B
C~D^E
Както в свързания отговор, той търси всякакви знаци, без алчност, последвано от комбинацията от ~^
(с избягала карета, така че ~\^
) или край на реда. regexp_substr()
calls също използва незадължителните аргументи, за да укаже subexpr
- така че получава само първото групиране (.*?
), а не самият разделител, който е във втората група.
Ако искате конкретен елемент, това е още по-близо до свързаната публикация:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Или докато правите това в процедура, използвайте заявката за свързване, за да попълните колекция и след това изберете елемента, от който се нуждаете, ако ще разглеждате повече от един.