English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
前の章では、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|p3 | pに一致します。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$';