Deze methode voor het splitsen van een string omzeilen terwijl nulls worden toegestaan:
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
Net als in het gekoppelde antwoord zoekt het naar alle tekens, niet gretig, gevolgd door de combinatie van ~^
(met escapetekens, dus ~\^
) of eindelijn. De regexp_substr()
calls gebruiken ook de optionele argumenten om subexpr
op te geven - dus het krijgt alleen de eerste groepering (.*?
) en niet het scheidingsteken zelf, dat in de tweede groep staat.
Als je een specifiek element wilt, dan is dat nog dichter bij het gelinkte bericht:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Of terwijl u dit in een procedure doet, gebruikt u de connect-by-query om een verzameling te vullen en kiest u vervolgens het element dat u nodig heeft, als u er meer dan één wilt bekijken.