Riffing de este método para dividir una cadena y permitir valores nulos:
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
Como en la respuesta vinculada, busca cualquier carácter, sin codicia, seguido de la combinación de ~^
(con el signo de intercalación escapado, entonces ~\^
) o final de línea. El regexp_substr()
llamadas también usa los argumentos opcionales para especificar subexpr
- por lo que solo obtiene la primera agrupación (.*?
) y no el delimitador en sí, que está en el segundo grupo.
Si desea un elemento específico, eso está aún más cerca de la publicación vinculada:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
O mientras hace esto en un procedimiento, use la consulta de conexión para completar una colección y luego elija el elemento que necesita, si va a ver más de uno.