MySQLのREGEXP演算子とは?正規表現によるパターンマッチングの使い方を解説
MySQLには、正規表現に基づくパターンマッチングを行うためのもうひとつの手段として、REGEXP演算子が用意されています。LIKE句による単純なワイルドカード検索よりも柔軟な条件指定が可能で、複雑な文字列パターンを抽出したい場合に非常に便利です。なお、REGEXPはRLIKEという別名(シノニム)でも呼び出せます。
REGEXPで使える主なパターン
REGEXP演算子と組み合わせて使用できる主なパターン(特殊文字)は以下の通りです。
| パターン | マッチする内容 |
| ^ | 文字列の先頭 |
| $ | 文字列の末尾 |
| . | 任意の1文字 |
| [...] | 角括弧内に列挙された文字のいずれか1文字 |
| [^...] | 角括弧内に列挙されていない任意の1文字 |
| p1|p2|p3 | 選択(OR)。p1、p2、p3のいずれかに一致 |
| * | 直前の要素の0回以上の繰り返し |
| + | 直前の要素の1回以上の繰り返し |
| {n} | 直前の要素のちょうどn回の繰り返し |
| {m,n} | 直前の要素のm回以上n回以下の繰り返し |
使用例
ここでは、以下のようなデータを持つ「Student_info」テーブルを例に、REGEXPの使い方を見ていきます。
mysql> Select * from Student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Chandigarh | Literature | | 130 | Ram | Jhansi | Computers | | 132 | Shyam | Chandigarh | Economics | | 133 | Mohan | Delhi | Computers | +------+---------+------------+------------+ 5 rows in set (0.00 sec)
続いて、REGEXPを使って「Name」カラムから特定のパターンに一致するレコードを抽出するクエリ例をいくつか紹介します。
先頭の文字で検索する(^)
mysql> Select Name from student_info WHERE Name REGEXP '^Y'; +---------+ | Name | +---------+ | YashPal | +---------+ 1 row in set (0.11 sec)
このクエリは、「Y」で始まる名前をすべて検索します。
末尾の文字で検索する($)
mysql> Select name from student_info WHERE Name REGEXP 'am$'; +-------+ | name | +-------+ | Ram | | Shyam | +-------+ 2 rows in set (0.00 sec)
このクエリは、「am」で終わる名前をすべて検索します。
部分一致で検索する
mysql> Select name from student_info WHERE Name REGEXP 'av'; +--------+ | name | +--------+ | Gaurav | +--------+ 1 row in set (0.00 sec)
このクエリは、名前に「av」を含むレコードをすべて検索します。位置指定の記号がない場合、REGEXPは文字列内のどこにあってもパターンに一致します。
複数の条件を組み合わせる(|)
mysql> Select name from student_info WHERE Name REGEXP '^[aeiou]|am$'; +-------+ | name | +-------+ | Ram | | Shyam | +-------+ 2 rows in set (0.00 sec)
このクエリは、「母音(a・e・i・o・u)で始まる」または「amで終わる」名前をすべて検索します。「|」はOR条件を表すため、どちらか一方の条件に一致すれば結果に含まれます。
-
MySQLで行を取得する際のAND演算子とOR演算子の違いとは?
MySQLにおけるAND演算子とOR演算子の違いANDとORの違いは次の通りです。ANDは、指定された両方の条件がすべて真(true)でなければ、全体の条件が真になりません。一方、ORは、どちらか一方の条件が真であれば、全体の条件が真になります。サンプルテーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo70-> (-> id int not null auto_increment primary key,-> name varchar(20),-> age int-> );Query OK, 0 r
-
C# 7.0のパターンマッチングとは?is式とswitch文の使い方を実例で解説
C# 7.0では、パターンマッチング(pattern matching)という新機能が導入されました。この機能は主に2つの場面、すなわちis式とswitchステートメントで利用できます。 パターンとは、ある値が特定の「形(shape)」を持っているかどうかを検査する仕組みです。値がパターンに一致した場合には、その値から情報を取り出すことも可能です。 パターンマッチングのメリット より簡潔な構文:アルゴリズムを短く読みやすいコードで記述できます。 任意のデータ型に対応:if/elseによる型判定ではプリミティブ型との比較が必要になる場面がありますが、パターンマッチングは独自に定義した型を含むあ