- ベストアンサー
oracleで正規表現を使用して文字列操作
regexp_substr、regexp_replaceなどを使って、カンマくぐりの文字列を 文字列の編集編集、部分文字列を取り出し、文字列の置換をしています。 要は、先頭、2番目、3番目、・・・・、最後と、そのカンマで区切られた 値をそれぞれ取り出したいのですが、どうしてもカンマが残ってしまいます。 以下、実際試したことです。 先頭 select regexp_substr('aaa,bbb,ccc,ddd','(^[^,]+)') from dual; select regexp_substr(',aaa,bbb,ccc,ddd','(^,[^,]+)') from dual; 最後 select regexp_substr('aaa,bbb,ccc,ddd',',([^,]+)$') from dual; select regexp_substr(',aaa,bbb,ccc,ddd',',([^,]+)$') from dual; 中間 select regexp_substr('aaa,bbb,ccc,ddd',',([^,]+)',1) from dual; select regexp_substr('aaa,bbb,ccc,ddd',',([^,]+)',1,2) from dual; select regexp_substr(',aaa,bbb,ccc,ddd',',([^,]+)',1,2) from dual; select regexp_substr(',aaa,bbb,ccc,ddd',',([^,]+)',1,3) from dual; 良い方法ないでしょうか。 また、regexp_replaceでも実現したいです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
最終目標がどのようなものなのかわかっていませんが、 単純に、何番目を取り出す、と言うのでは何か問題があるのでしょうか。 SELECT regexp_substr('aaa,bbb,ccc,ddd', '[^,]+', 1, 1) FROM dual;/* 1番目 */ SELECT regexp_substr('aaa,bbb,ccc,ddd', '[^,]+', 1, 2) FROM dual;/* 2番目 */ SELECT regexp_substr('aaa,bbb,ccc,ddd', '[^,]+', 1, 3) FROM dual;/* 3番目 */ SELECT regexp_substr('aaa,bbb,ccc,ddd', '[^,]+', 1, 4) FROM dual;/* 4番目 */
その他の回答 (1)
- dell_OK
- ベストアンサー率13% (766/5720)
何番目を指定せずにと言う事でしたらこのような方法があるのですが、カンマで区切ったものが行になってしまうので、列として取得するには何かしらの工夫が必要です。 以下の例では、区切ったものの個数を最大4(LEVEL <= 4)として想定しているので、カンマの数に合わせて調整してみてください。 SELECT regexp_substr('aaa,bbb,ccc,ddd', '[^,]+', 1, LEVEL) FROM dual CONNECT BY LEVEL <= 4
補足
ありがとうございます。 検索の開始位置や検知回数を使わずに正規表現パターンできないかと思った次第です、。 regexp_replaceで置換できないかと思った次第です。 折角、機能があるのに使わない方がと思いました。
お礼