English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL正規表現

前の章では、MySQLが以下のように使用できることを学びました。 LIKE ...% を模糊マッチに使用します。

MySQLも他の正則表現のマッチをサポートしており、MySQLではREGEXP演算子を使用して正則表現マッチを行います。

PHPやPerlを理解している場合、操作は非常に簡単です。なぜなら、MySQLの正則表現マッチはこれらのスクリプトと類似しています。

以下の正則パターンはREGEXP演算子に適用できます。

パターン説明
^入力文字列の開始位置に一致します。RegExpオブジェクトのMultiline属性が設定されている場合、「\n」または「\r」の後の位置にも一致します。
$入力文字列の終了位置に一致します。RegExpオブジェクトのMultiline属性が設定されている場合、「\n」または「\r」の前の位置にも一致します。
.「\n」以外の任意の単一文字に一致します。「\n」を含む任意の文字に一致させる場合は、像「[.\n]」のようなパターンを使用してください。
[...]文字集合。含まれる任意の文字に一致します。例えば、「[abc]」は「plain」の中の「a」に一致します。
[^...]負値文字集合。未含まれる任意の文字に一致します。例えば、「[^abc]」は「plain」の中の「p」に一致します。
p1|p2|p3pに一致します。1 または p2 または p3。例えば、「z|food」は「z」または「food」に一致します。「(z|f)ood」は「zood」または「food」に一致します。
*前の子表現を零回または複数回一致させることです。例えば、zo* 「z」および「zoo」に一致します。* 等価です。
+前の子表現を一度または複数回一致させることです。例えば、「zo+「'」は「zo」および「zoo」に一致しますが、「z」には一致しません。+ 等価です。1、}。
{n}nは非負整数です。n回一致させることです。例えば、「o{2「'」は「Bob」の中の「o」に一致しませんが、「food」の中の二つの「o」には一致します。
{n,m}mとnは非負整数であり、n <= mです。最少m回および最多m回のマッチングを行います。

オンラインサンプル

上記の正規表現の要件を理解した後、自分の要件に応じて正規表現を含むSQL文を書くことができます。以下にいくつかの小さな例(テーブル名:person_tbl)を挙げて、理解を深めます:

nameフィールドが'st'文字列で始まるすべてのデータを検索:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

nameフィールドが'ok'文字列で終わるすべてのデータを検索:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

nameフィールドに'mar'文字列を含むすべてのデータを検索:

mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

nameフィールドが元音文字で始まるまたは'ok'文字列で終わるすべてのデータを検索:

mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';