*の方向性はどうでもいい

プログラミングなどの学習履歴として最初は書いてたけどもう何でもいいやと思って今に至る

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

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

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

 

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

 

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

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

 

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

 

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

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

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

 

書き方は

 

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

 

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

 

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

 

"文字列",

 

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

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

 

文法に当てはめると、

 

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

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

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

 

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

 

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

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

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

 

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

 

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