LoginSignup
46
47

More than 3 years have passed since last update.

PostgreSQLで正規表現

Last updated at Posted at 2016-01-24

正規表現マッチ演算子

PostgreSQLには正規表現マッチ演算子というのがある。LIKEやILIKEでは表現しきれないパターンに使える。

演算子 説明
~ 正規表現に一致する。大文字小文字の区別あり。
~* 正規表現に一致する。大文字小文字の区別なし。
!~ 正規表現に一致しない。大文字小文字の区別あり。
!~* 正規表現に一致しない。大文字小文字の区別なし。

~ が基本。
~*~ の大文字小文字区別なし版。
!~!~* はそれぞれ ~~* の否定。

結果
'abc' ~ '^a' true
'abc' ~* '^a' true
'abc' ~ '^A' false
'abc' ~* '^A' true
'abc' !~ '^a' false
'abc' !~* '^a' false
'abc' !~ '^A' true
'abc' !~* '^A' false

regexp_replace

正規表現を用いた文字列置換関数。

regexp_replace(string text, pattern text, replacement text [, flags text])

\1, \2, … \N でパターン内において括弧でくくった部分にマッチした部分を replacement に使うことができる。\N はN番目の括弧の部分。実際の replacement では \\1 のようにバックスラッシュを重ねて書く。

主なフラグ

フラグ 説明
i 大文字小文字の区別をしない
g 最初のマッチだけでなく全てのマッチを置換

実行例

結果
REGEXP_REPLACE('abcdeabcde', 'c.', 'X') abXeabcde
REGEXP_REPLACE('abcdeabcde', 'c.', 'X', 'g') abXeabXe
REGEXP_REPLACE('ABCDEabcde', 'c.', 'X', 'g') ABCDEabXe
REGEXP_REPLACE('ABCDEabcde', 'c.', 'X', 'ig') ABXEabXe
REGEXP_REPLACE('abcdeabcde', 'b(.)d', E'Y\\1Z', 'g') aYcZeaYcZe

参考ページ

PostgreSQL 9.1.5文書 9.7.3. POSIX正規表現
PostgreSQL 9.1.5文書 4.1.2.2. C形式エスケープでの文字列定数

46
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
47