regexp_substrは次のように機能します:
オカレンスが1より大きい場合、データベースはパターンの最初のオカレンスに続く最初の文字で始まる2番目のオカレンスを検索します 、など。この動作は、最初のオカレンスの2番目の文字で2番目のオカレンスの検索を開始するSUBSTR関数とは異なります。
したがって、パターン[^ |]は非パイプを検索します。つまり、連続するパイプ( "||")をスキップして、非パイプ文字を検索します。
試してみてください:
select trim(regexp_substr(replace('A|test||string', '|', '| '), '[^|]+', 1, 4)) from dual;
これは「|」を置き換えます「|」を付けて、パターンに基づいて一致させることができます[^ |]