Regexp_substr bekerja dengan cara ini:
Jika kemunculan lebih besar dari 1, maka basis data mencari kemunculan kedua yang dimulai dengan karakter pertama setelah kemunculan pola pertama , Dan seterusnya. Perilaku ini berbeda dengan fungsi SUBSTR, yang memulai pencarian kemunculan kedua pada karakter kedua dari kemunculan pertama.
Jadi pola [^|] akan mencari pipa NON, artinya akan melewati pipa berurutan ("||") mencari karakter non-pipa.
Anda dapat mencoba:
select trim(regexp_substr(replace('A|test||string', '|', '| '), '[^|]+', 1, 4)) from dual;
Ini akan menggantikan "|" dengan "| " dan memungkinkan Anda untuk mencocokkan berdasarkan pola [^|]