MySQLの正規表現
MySQL 正規表現
前の章では、MySQL が LIKE ...% を通じてあいまい一致を実行できることを学びました。
MySQL は他の正規表現マッチングもサポートしています。MySQL は正規表現マッチングに REGEXP 演算子を使用します。
PHP または Perl を知っている場合は、MySQL の正規表現マッチングはこれらのスクリプトの正規表現マッチングと似ているため、非常に簡単です。
以下の表の規則的なパターンは、REGEXP 演算子に適用できます。
パターン | 説明 |
---|---|
^ | 入力文字列の先頭と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、^ は 'n' または 'r' の後の位置にも一致します。 |
$ | 入力文字列の終了位置と一致します。 RegExp オブジェクトの Multiline プロパティが設定されている場合、$ は 'n' または 'r' の前の位置にも一致します。 |
. | は、「n」を除く任意の 1 文字と一致します。 「n」を含む任意の文字と一致するには、「[.n]」のようなパターンを使用します。 |
[...] | キャラクターコレクション。含まれている文字のいずれかと一致します。たとえば、「[abc]」は「plain」の「a」と一致します。 |
[^...] | ネガティブなキャラクターのコレクション。含まれていない任意の文字と一致します。たとえば、「[^abc]」は「plain」の「p」と一致します。 |
p1|p2|p3 | は、p1、p2、または p3 と一致します。たとえば、「z|food」は「z」または「food」と一致します。 '(z|f)ood' は、「zood」または「food」と一致します。 |
* | 直前の部分式と 0 回以上一致します。たとえば、zo* は「z」と「zoo」に一致します。 * {0,} に相当します。 |
+ | は、前の部分式と 1 回以上一致します。たとえば、「zo+」は「zo」と「zoo」には一致しますが、「z」には一致しません。 + は {1,} と同等です。 |
{n} | n は負ではない整数です。特定の回数 n 回一致します。たとえば、「o{2}」は「Bob」の「o」とは一致しませんが、「food」の両方の「o」には一致します。 |
{n,m} | m と n は両方とも非負の整数であり、n <= m です。少なくとも n 回、最大で m 回一致します。 |
例
上記の正規表現の要件を理解した後、必要に応じて正規表現を使用して SQL ステートメントを作成できます。以下に、理解を深めるためにいくつかの小さな例 (テーブル名: person_tbl) をリストします:
名前フィールドで 'st' で始まるすべてのデータを検索します:
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';名前フィールドで 'ok' で始まるすべてのデータを検索します最後のすべてのデータ:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';名前フィールドに文字列「mar」を含むすべてのデータを検索します:
mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';名前フィールドで母音文字で始まり文字列 ' で終わるすべてのデータを検索しますok':
mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
推奨ビデオチュートリアル: