正規表現マッチ演算子
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形式エスケープでの文字列定数