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
リンクされた回答のように、貪欲ではない任意の文字を検索し、その後に~^
の組み合わせを検索します (キャレットをエスケープしたので、~\^
)または行末。 regexp_substr()
呼び出しでは、オプションの引数を使用してsubexpr
も指定します -したがって、最初のグループ化のみを取得します(.*?
)であり、2番目のグループに含まれる区切り文字自体ではありません。
特定の要素が必要な場合は、リンクされた投稿にさらに近いです:
select regexp_substr('A~^B~^C~D^E','(.*?)(~\^|$)', 1, 3, null, 1) from dual;
REGEX
-----
C~D^E
または、プロシージャでこれを実行しているときに、connect-byクエリを使用してコレクションにデータを入力し、複数の要素を表示する場合は、必要な要素を選択します。