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