Help us understand the problem. What is going on with this article?

PostgreSQLで正規表現

More than 1 year has passed since last update.

正規表現マッチ演算子

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形式エスケープでの文字列定数

y_ito
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした