クイックスタート
チュートリアル
ツールと言語
リファレンス
書籍レビュー
正規表現ツール
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 MySQL developers!

MySQLのREGEXP演算子による正規表現

MySQLの正規表現のサポートはかなり限定的ですが、それでも非常に便利です。MySQLには、正規表現を扱うための演算子が1つしかありません。これはREGEXP演算子で、LIKE演算子とほぼ同じように機能しますが、_%ワイルドカードの代わりに、POSIX拡張正規表現(ERE)を使用します。標準の名前にある「拡張」にもかかわらず、POSIX EREフレーバーは、現代の標準からするとかなり基本的な正規表現フレーバーです。それでも、REGEXP演算子は、単純なLIKE演算子よりもはるかに強力で柔軟になります。

LIKE演算子とREGEXP演算子の重要な違いの1つは、LIKE演算子はパターンが文字列全体に一致する場合にのみTrueを返すことです。たとえば、WHERE testcolumn LIKE 'jg'は、testcolumnがjgと完全に一致する行のみを返します(大文字と小文字の違いは除きます)。一方、WHERE testcolumn REGEXP 'jg'は、testcolumnにjgが文字列のどこかに含まれているすべての行を返します。完全に一致する列のみを取得するには、WHERE testcolumn REGEXP '^jg$'を使用します。jgの同等のものは、WHERE testcolumn LIKE 'jg%'WHERE testcolumn REGEXP '^jg'になります。部分一致が許可されているため、正規表現の最後に.*を置く必要はありません(LIKEの%に相当するREGEXP)。

MySQLは、マッチングモードを提供していません。POSIX EREは、正規表現内のモード修飾子をサポートしておらず、MySQLのREGEXP演算子は、正規表現の外部でモードを指定する方法を提供していません。ドットは、改行を含むすべての文字に一致し、キャレットとドルは、文字列の先頭と末尾でのみ一致します。言い換えれば、MySQLは改行文字を通常の文字として扱います。テーブルの照合順序が大文字と小文字を区別しない場合(これはデフォルトです)、REGEXP演算子は正規表現を大文字と小文字を区別せずに適用します。照合順序を大文字と小文字を区別するように変更すると、REGEXP演算子は大小文字を区別するようになります。

MySQLは文字列内でCスタイルのエスケープシーケンスをサポートしていることを覚えておいてください。POSIX EREは、改行などの印刷不可能な文字に一致させるための\nのようなトークンをサポートしていませんが、MySQLはその文字列内でこのエスケープをサポートしています。したがって、WHERE testcolumn REGEXP '\n'は、testcolumnに改行が含まれるすべての行を返します。MySQLは、正規表現を解析する前に、文字列内の\nを単一の改行文字に変換します。これは、バックスラッシュをエスケープする必要があることも意味します。単一のバックスラッシュに一致する正規表現\\は、MySQL文字列としては'\\\\'になり、ドル記号に一致する正規表現\$は、MySQL文字列としては'\\$'になります。これは、Oracleのような他のデータベースとは異なり、\nをサポートしておらず、バックスラッシュをエスケープする必要もありません。

列が正規表現と一致しない行を返すには、WHERE testcolumn NOT REGEXP 'パターン'を使用します。RLIKE演算子は、REGEXP演算子の同義語です。WHERE testcolumn RLIKE 'パターン'WHERE testcolumn NOT RLIKE 'パターン'は、WHERE testcolumn REGEXP 'パターン'WHERE testcolumn NOT REGEXP 'パターン'と同一です。LIKE演算子との混同を避けるために、RLIKEの代わりにREGEXPを使用することをお勧めします。

LIB_MYSQLUDF_PREG

データベースでより強力な正規表現を使用したい場合は、LIB_MYSQLUDF_PREGの使用を検討できます。これは、PCREライブラリをインポートするMySQLユーザー関数のオープンソースライブラリです。LIB_MYSQLUDF_PREGは、ソースコード形式でのみ提供されます。これを使用するには、それをコンパイルしてMySQLサーバーにインストールできる必要があります。このライブラリをインストールしても、MySQLに組み込まれている正規表現のサポートは変更されません。単に以下の追加関数が利用可能になるだけです

PREG_CAPTUREは、文字列から正規表現の一致を抽出します。PREG_POSITIONは、正規表現が文字列に一致する位置を返します。PREG_REPLACEは、文字列に対して検索と置換を実行します。PREG_RLIKEは、正規表現が文字列に一致するかどうかをテストします。

これらの関数はすべて、最初のパラメーターとして正規表現を受け取ります。この正規表現は、Perlの正規表現演算子のようにフォーマットする必要があります。たとえば、regexが対象を大文字と小文字を区別せずに一致するかどうかをテストするには、MySQLコードPREG_RLIKE('/regex/i', subject)を使用します。これは、PHP文字列内の正規表現に追加の//デリミターを必要とするPHPのpreg関数に似ています。

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

| 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 |