SQLφ(..)メモメモその4正規表現

SQLφ(..)メモメモその4正規表現

文字列のつづき、正規表現によるSQLの使い方ですね。
正規表現は、すごいですねー。ちゃんと勉強したい

regexp_contains(列,r’正規表現’)文字列が正規表現に合致してればtrue 合致してなければfalseを返します。条件文にするならBoolen型だから regexp_contains(列,r’正規表現’) is true とかfalseと書く。
regexp_extract(列,r’正規表現’)正規表現に合致した部分だけ取り出す
regexp_replace(列,r’正規表現の置き換えたい文字列’,’置き換える文字列’)
たとえばメアドマスキングに使えそうなのが regexp(列,r'[^@]’,’X’) メアド全部XXX@XXXXする。

正規表現。この表がわかりやすそう

正規表現の常識(%や_をワイルドカードにするのは正規表現じゃないからね
ちなみに(バックスラッシュ)は日本語キーボードで出てきにくいけど¥(円の半角)と同じだよ
^ 前方一致
$後方一致
もしくは¥前の言葉を打ち消す
[0-9]0から9までの数字
* は、直前の文字がないか、直前の文字が1個以上連続するという意味
おー*い は  おい おーーい おーーーーい を検索できる
+は、1子以上の繰り返し。最低でも1個は + の直前の文字がないといけません。後は、それが連続するという意味になります。
おー+い は おーい おーーい おーーーーい を検索できるが おい は対象外。
? の場合は、直前の文字がまったくないか、1つだけあるという意味
おー?い は おい おーい はありだけど、 おーーい おーーーーい は対象外。
[文字] 角括弧に含まれるいずれか1文字にマッチします。 [abc] abcいずれか
[^ ] 括弧内に含まれない 1 文字
(文字) 文字を1つのグループにできる [ab|cd]はabもしくはcdが含まれてる文字となる
d すべての数字 [0-9] と同じ
D すべての数字以外の文字 [60-9] と同じ
s 垂直タブ以外のすべての空白文字 [ tfrn] と同じ t タブ f改ページ r nどっちも改行ね

使えそうな例
・メールアドレス@より前の文字を抽出(つまりアカウント名ですね) ’^[^@]+’
・電話番号のハイフンに囲まれた真ん中の番号 12-3456-7890の3456ですね ’-(d+)-‘
・GAのチャネルグループのスラッシュ後半だけ抽出 ’/s(.+)$’
おもしろいけどむずい。