Riffing dieser Methode zum Aufteilen einer Zeichenfolge unter Zulassen von Nullen:
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
Wie in der verknüpften Antwort wird nicht gierig nach beliebigen Zeichen gesucht, gefolgt von der Kombination von ~^
(mit dem Caret-Zeichen, also ~\^
) oder Zeilenende. Der regexp_substr()
Aufrufe verwendet auch die optionalen Argumente, um subexpr
anzugeben - es bekommt also nur die erste Gruppierung (.*?
) und nicht das Trennzeichen selbst, das sich in der zweiten Gruppierung befindet.
Wenn Sie ein bestimmtes Element wünschen, ist das noch näher am verlinkten Beitrag:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Oder verwenden Sie, während Sie dies in einer Prozedur tun, die Connect-by-Abfrage, um eine Sammlung zu füllen, und wählen Sie dann das Element aus, das Sie benötigen, wenn Sie mehr als eines betrachten.