クイック スタート
チュートリアル
ツール と 言語
リファレンス
書籍 レビュー
正規表現ツール
grep
PowerGREP
RegexBuddy
RegexMagic
汎用アプリケーション
EditPad Lite
EditPad Pro
言語とライブラリ
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
Xojo
XQuery & XPath
XRegExp
データベース
MySQL
Oracle
PostgreSQL
このサイトのその他の情報
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷用PDF
このサイトについて
RSSフィードとブログ
RegexBuddy—The best regex editor and tester for PostgreSQL developers!

PostgreSQLには3つの正規表現フレーバーがあります

PostgreSQL 7.4 以降では、Henry Spencer が Tcl 8.2 のために開発した正規表現エンジンとまったく同じものが使用されています。つまり、PostgreSQL は、Tcl の高度な正規表現POSIX 拡張正規表現、およびPOSIX 基本正規表現という 3 つの正規表現フレーバーをサポートしています。Tcl と同様に、ARE がデフォルトです。Tcl の正規表現フレーバーに関する私のコメント (通常ではないモード修飾子や単語境界トークンなど) は、PostgreSQL にも完全に当てはまります。Tcl の ARE に慣れていない場合は、必ずそれらを確認する必要があります。ただし、残念ながら、PostgreSQL の regexp_replace 関数は、Tcl の regsub コマンドと同じ置換テキストの構文を使用していません。

7.4 より前の PostgreSQL バージョンでは、POSIX 拡張正規表現のみがサポートされていました。古いデータベース コードを新しいバージョンの PostgreSQL に移行する場合は、PostgreSQL の「regex_flavor」ランタイム パラメータをデフォルトの「advanced」ではなく「extended」に設定すると、ERE がデフォルトになります。

PostgreSQL は、従来の SQL LIKE 演算子と SQL:1999 SIMILAR TO 演算子もサポートしています。これらは独自のパターン言語を使用しており、ここでは説明しません。ARE ははるかに強力であり、LIKE や SIMILAR TO では提供されていない機能を使用しなければ、それほど複雑ではありません。

チルダ演算子

チルダ接中辞演算子は、正規表現が文字列の一部と一致するかどうかに応じて、true または false を返します。例:'subject' ~ 'regexp'は false を返し、一方'subject' ~ '\\w'は true を返します。正規表現が文字列全体と一致する必要がある場合は、アンカーを使用する必要があります。例:'subject' ~ '^\\w$'は false を返し、一方'subject' ~ '^\\w+$'は true を返します。この演算子には 4 つのバリエーションがあります。

演算子で切り替えられるのは大文字と小文字の区別のみですが、他のすべてのオプションは、正規表現の先頭でモード修飾子を使用して設定できます。モード修飾子は、演算子の型をオーバーライドします。たとえば、「(?c)regex」は正規表現の大文字と小文字を区別するように強制します。

この演算子の最も一般的な使用法は、列が正規表現と一致するかどうかに基づいて行を選択することです。例:

select * from mytable where mycolumn ~* 'regexp'

リテラル PostgreSQL 文字列としての正規表現

バックスラッシュは、PostgreSQL 文字列で文字をエスケープするために使用されます。したがって、次のような正規表現\wバックスラッシュを含むものは、'\\w'PostgreSQL ステートメントにリテラル文字列として記述すると、こうなります。単一のリテラル バックスラッシュと一致させるには、正規表現\\が必要です。これは'\\\\'PostgreSQL ではこうなります。

PostgreSQL 正規表現関数

次のsubstring(string from pattern)関数を使用すると、文字列または列の一部を抽出できます。これには 2 つのパラメータがあります。テキストを抽出する文字列と、抽出したテキストが一致する必要があるパターンです。一致するものがない場合、substring()は null を返します。例:substring('subject' from 'regexp')は null を返します。一致するものがあり、正規表現に 1 つ以上のキャプチャ グループがある場合、最初のキャプチャ グループで一致したテキストが返されます。例:substring('subject' from 's(\\w)')は「u」を返します。一致するものがあり、正規表現にキャプチャ グループがない場合、正規表現全体の一致が返されます。例:substring('subject' from 's\\w')は「su」を返します。正規表現が文字列と複数回一致する場合、最初の一致のみが返されます。このsubstring()関数には「flags」パラメータがないため、モード修飾子を使用して一致オプションを切り替える必要があります。

この関数は、列から情報を抽出するのに特に便利です。たとえば、各行の列 mycolumn から最初の数値を抽出するには、次のように使用します。

select substring(mycolumn from '\d+') from mytable

regexp_replace(subject, pattern, replacement [, flags])を使用すると、文字列内の正規表現の一致を置き換えることができます。flags パラメータを省略した場合、正規表現は大小文字を区別して適用され、最初の一致のみが置き換えられます。flags を'i'に設定すると、正規表現は大小文字を区別せずに適用されます。'g'フラグ (「グローバル」) を使用すると、文字列内のすべての正規表現の一致が置き換えられます。両方のフラグを'gi'.

として結合できます。置換テキストで、\1から\9までの後方参照を使用して、キャプチャ グループによって一致したテキストを正規表現に再挿入できます。\&は正規表現全体の一致を再挿入します。リテラル文字列ではバックスラッシュを 2 倍にする必要があることに注意してください。

例:regexp_replace('subject', '(\w)\w', '\&\1', 'g')'susbjbecet'.

を返します。PostgreSQL 8.3 以降には、正規表現の一致に沿って文字列を分割する 2 つの新しい関数があります。regexp_split_to_table(subject, pattern[, flags])は、分割された文字列を新しいテーブルとして返します。regexp_split_to_array(subject, pattern[, flags])は、分割された文字列をテキストの配列として返します。正規表現で一致するものが見つからない場合、両方の関数は対象文字列を返します。

| クイック スタート | チュートリアル | ツール と 言語 |  | リファレンス | 書籍 レビュー |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |