Riffing off tuto metodu pro rozdělení řetězce s povolením null:
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
Stejně jako v propojené odpovědi hledá všechny znaky, nenásytně, následované kombinací ~^
(s stříškou escapovanou, takže ~\^
) nebo konec řádku. regexp_substr()
volání také používá volitelné argumenty k určení subexpr
- takže získá pouze první seskupení (.*?
) a nikoli samotný oddělovač, který je ve druhé skupině.
Pokud chcete konkrétní prvek, pak je to ještě blíže odkazovanému příspěvku:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Nebo když to děláte v proceduře, použijte dotaz typu connect-by k naplnění kolekce a poté vyberte prvek, který potřebujete, pokud se budete dívat na více než jeden.