Riffing metode ini untuk memisahkan string sambil mengizinkan 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
Seperti pada jawaban tertaut, ia mencari karakter apa pun, tidak serakah, diikuti oleh kombinasi ~^
(dengan tanda sisipan lolos, jadi ~\^
) atau akhir baris. regexp_substr()
panggilan juga menggunakan argumen opsional untuk menentukan subexpr
- jadi hanya mendapat pengelompokan pertama (.*?
) dan bukan pembatas itu sendiri, yang ada di pengelompokan kedua.
Jika Anda menginginkan elemen tertentu maka itu lebih dekat ke pos tertaut:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
Atau saat Anda melakukan ini dalam prosedur, gunakan kueri sambungkan untuk mengisi koleksi, lalu pilih elemen yang Anda butuhkan, jika Anda akan melihat lebih dari satu.