Afviger denne metode til at opdele en streng, mens der tillades nuller:
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
Som i det linkede svar søger det efter alle tegn, ikke-grådigt, efterfulgt af kombinationen af ~^
(med markeringen undsluppet, så ~\^
) eller end-of-line. regexp_substr()
calls bruger også de valgfrie argumenter til at specificere subexpr
- så den får kun den første gruppering (.*?
) og ikke selve afgrænseren, som er i den anden gruppering.
Hvis du vil have et specifikt element, så er det endnu tættere på det linkede indlæg:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Eller mens du gør dette i en procedure, skal du bruge forbindelses-forespørgslen til at udfylde en samling og derefter vælge det element, du har brug for, hvis du vil se på mere end ét.