読者です 読者をやめる 読者になる 読者になる

学習履歴

プログラミングなどの学習履歴

文字列の検索と抽出を一度にする関数

Oracle SQL Developerでストアドプロシージャを組んでいて正規表現を使って特定の文字を検索して、

文字を抜き出さなければならない場面がでた。

 

正規表現は苦手というか見た目が好きでないけど、四の五の言ってられなかった。

 

やることはCSVファイルのから値を抜き出して、

それを指定のテーブルに格納するというもの。

 

でもここではREGEXP_SUBSTRについて自分が学んだことを記録する。

 

そもそもREGEXP_SUBSTRって何ぞやから始まって、

結局のところInstr(文字列から特定の文字を検索)とSubstr(文字列を部分的に抜き出す)の

これら二つの関数の特性を合わせもった関数みたいだ。

 

書き方は

 

REGEXP_SUBSTR(対象の文字列, 正規表現のパターン, 取り出す文字列の開始位置);

 

と、たいていは上記のような書き方になる。

 

自分が使ったCSVの値の構成は、

 

"文字列",

 

のようなクォートで値が囲まれてのカンマ区切りという構成で、

これから文字列のみを抜き出す。

 

文法に当てはめると、

 

REGEXP_SUBSTR('対象の文字列', \"([^\"])*\", 3);

これでダブルクオテーションで囲まれた文字列の0番目から数えて3つ目以降の

文字列が抜き出されます。

 

もし文字列の中にダブルクオテーションがある場合は、

 

REGEXP_SUBSTR('対象の文字列', \"(\\\"|[^\"])*\", 3);

と記述すると文字列のなかにダブルクオテーションがあっても、

文字列が抜き出されます。

 

正規表現は自分にとってややこしいので地道に慣れるしかないな。。

 

ちなみにこのREGEXP_SUBSTR関数はOracle意外では使えなかったはず