Riffing off tej metody dzielenia ciągu przy jednoczesnym dopuszczaniu wartości 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
Podobnie jak w połączonej odpowiedzi, szuka dowolnych znaków, niechętnie, po których następuje kombinacja ~^
(ze znakiem ucieczki, więc ~\^
) lub końca wiersza. regexp_substr()
wywołania używają również opcjonalnych argumentów do określenia subexpr
- więc pobiera tylko pierwsze grupowanie (.*?
), a nie sam ogranicznik, który znajduje się w drugiej grupie.
Jeśli potrzebujesz konkretnego elementu, to jest on jeszcze bliżej linkowanego posta:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Lub wykonując to w procedurze, użyj zapytania connect-by, aby wypełnić kolekcję, a następnie wybierz potrzebny element, jeśli będziesz przeglądać więcej niż jeden.