MySQL での正規表現の使用に関する詳細

MySQL での正規表現の使用に関する詳細

1. はじめに

MySQL正規表現のマッチングをサポートしています。複雑なフィルタリング条件では、正規表現の使用を検討できます。正規表現を使用するには、正規表現の構文と手順を習得する必要があります。Xiaoba は学習アドレスとMySQLツールを推奨しています。MySQL で正規表現を使用する方法を学習する前に、正規表現の構文と手順を理解しておく必要があります。

正規表現学習ウェブサイト:

www.runoob.com/regexp/reg…

正規表現オンラインテスト:

c.runoob.com/front-end/8…

MySQLでサポートされている正規表現は、多数の正規表現実装のサブセットにすぎないことに注意してください。正規表現を使用する前にテストすることをお勧めします。 テスト時に、最初にテーブルを作成してデータを挿入する必要はありません。select を直接使用してフォーム句を省略し、簡単な方法で式を処理できます。

たとえば、次のようになります。

mysql> select 'I love you China' regexp 'I love you';
+------------------------------+
| 「愛してるよ、中国」正規表現「愛してるよ」 |
+------------------------------+
| 1 |
+------------------------------+

mysql> '12306' 正規表現 '[:digit:]' を選択します。
+----------------------------+
| '12306' 正規表現 '[:数字:]' |
+----------------------------+
| 1 |
+----------------------------+

2. 製品テーブルを準備する

まず、 productテーブルを準備します。DDLとテーブルデータは以下の通りで、そのままコピーして使用できます。

名前を設定します utf8mb4;
FOREIGN_KEY_CHECKS = 0 を設定します。

-- ----------------------------
-- 製品のテーブル構造
-- ----------------------------
`product` が存在する場合はテーブルを削除します。
テーブル「product」を作成します(
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主キー',
  `product_name` varchar(255) 文字セット utf8 COLLATE utf8_general_ci NOT NULL COMMENT '製品名',
  `price` 10進数(10, 2) UNSIGNED NOT NULL COMMENT '製品価格',
  BTREE を使用した主キー (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- 製品の記録
-- ----------------------------
`product` VALUES (1, 'Apple iPhone 13 (A2634)', 6799.00) に INSERT INTO します。
`product` VALUES (2, 'HUAWEI P50 Pro', 6488.00) に INSERT INTO します。
`product` VALUES (3, 'MIX4', 4999.00) に INSERT します。
`product` VALUES (4, 'OPPO Find X3', 3999.00) に INSERT INTO します。
`product` VALUES (5, 'vivo X70 Pro+', 5999.00) に INSERT INTO します。

FOREIGN_KEY_CHECKS = 1 を設定します。

初期データは次のようになります。

mysql> 製品から * を選択します。
+----+-------------------------+---------+
| ID | 製品名 | 価格 |
+----+-------------------------+---------+
| 1 | Apple iPhone 13 (A2634) | 6799.00 |
| 2 | HUAWEI P50 Pro | 6488.00 |
| 3 | ミックス4 | 4999.00 |
| 4 | OPPO Find X3 | 3999.00 |
| 5 | vivo X70 Pro+ | 5999.00 |
+----+-------------------------+---------+

2.1 ステートメントの順序

正規表現の機能はテキストのマッチングです。正規表現をテキストの内容と比較することで、テキストが正規表現で記述されたルールに準拠しているかどうかを確認できます。 MySQLでは、 where句で正規表現を使用して、 selectクエリ内のデータをフィルタリングします。

select * from table_name where regexp '正規表現' order by cloumn_name ;

必要:

製品名に3が含まれる製品を製品テーブルで照会する

声明:

mysql> select * from product where product_name regexp '3';

結果:

+----+-------------------------+---------+
| ID | 製品名 | 価格 |
+----+-------------------------+---------+
| 1 | Apple iPhone 13 (A2634) | 6799.00 |
| 4 | OPPO Find X3 | 3999.00 |
+----+-------------------------+---------+

2.2 大文字と小文字の区別方法

MySQLデフォルトで大文字と小文字を区別しない正規表現を使用しますが、ほとんどの場合、英語の大文字と小文字を明示的に一致させる必要があります。この場合は、 binaryキーワードを使用できます。

必要:

製品名にHuaweiが含まれる製品を製品表で検索します。

声明:

mysql> select * from product where product_name regexp 'huawei';

結果:

+----+----------------+---------+
| ID | 製品名 | 価格 |
+----+----------------+---------+
| 2 | HUAWEI P50 Pro | 6488.00 |
+----+----------------+---------+

現時点では、クエリ結果はデフォルトで大文字と小文字を区別しないため、直接クエリできます。クエリで大文字と小文字を区別したい場合は、 regexpの後にbinaryキーワードを追加するだけです。

声明:

mysql> select * from product where product_name regexp binary 'huawei';

結果:

空のセット (0.00 秒)

productテーブルには小文字のhuawei製品が含まれていないため、返される結果はEmpty set

2.3 正規表現とlikeの違い

上記で実装した機能は、実際に like を使用して実現できることに気付いた方もいると思います。多くのシナリオでは、文字列を一致させるために like を使用しますが、これらのシナリオは多くの場合非常に単純です。正規表現は非常に強力なテキスト検索およびフィルタリング ツールであり、実現できる機能は like 演算子よりもはるかに強力です。つまり、LIKE が正規表現で実行できることはすべて、基本的に正規表現が LIKE で実行できることは何もありません (または、非常にトリッキーです)。

たとえば、次の要件は正規表現を使用して簡単に実装できますが、like 演算子を実装する方法がわかりません。

必要:

製品テーブルをクエリし、製品名にvが少なくとも1回出現する製品情報を検索します。

声明:

mysql> select * from product where product_name regexp 'v+';

結果:

+----+---------------+---------+
| ID | 製品名 | 価格 |
+----+---------------+---------+
| 5 | vivo X70 Pro+ | 5999.00 |
+----+---------------+---------+

注:正規表現は、繰り返されるメタ文字を連続した出現全体として一致させます。ここに、繰り返し使用されるメタ文字をいくつか示します。誤解される方もいると思います。

メタ文字の繰り返し

メタ文字例示する
* 0 個以上の一致の場合、効果は {0,} と同じです。
+ 1 つ以上の一致がある場合、効果は {1,} と同じです。
? 1 または 0 が一致する場合、効果は {0,1} と同じです。
{n}一致したnの数に等しい
{n,} n 以上の一致
{n,m} n 以上 m 以下、m<255

以下もご興味があるかもしれません:
  • MySQL の group by に関する簡単な説明
  • MySQLでインデックスエラーが発生する状況について簡単に説明します
  • MySQLデータベースインデックスの左端一致原則
  • MySQL のインデックス有効条件とインデックス無効条件の結合
  • MySQLの整数および文字列インデックスの無効化または暗黙的な変換に関する簡単な説明
  • Windows/Mac で Docker を使用して MySQL (utf8 を含む) をインストールする
  • mysql5.7のインストールとNavicateの長期無料利用の実施手順
  • GinとMySQLを使ったシンプルなRestfulスタイルAPIの実装例を詳細に解説
  • MySQL での order by の使用に関する詳細

<<:  HTMLフォーム要素の包括的な理解

>>:  jquery-multiselect を使用した IE6 のバグの解決方法

推薦する

Vueはカルーセルのフレームレート再生を実装します

この記事の例では、カルーセルのフレームレート再生を実現するためのVueの具体的なコードを参考までに共...

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

ElementUI ページネーション コンポーネントの使い方 Vue でのページネーション

ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...

ウェブデザイン実践者必読のキャリアプラン

原文記事、転載の際は著者と出典を明記してください! Web デザインは間違いなくテクノロジーであり、...

ドロップダウンボックス選択コンポーネントを実装するためのネイティブ js

この記事の例では、ドロップダウンボックス選択コンポーネントを実装するためのjsの具体的なコードを参考...

JavaScript プロトタイプチェーンを理解するための 2 つの図

目次1. プロトタイプの関係2. プロトタイプチェーン3. 結論序文:前回の記事では、JavaScr...

Ubuntu 19にTheanoをインストールする際の問題を解決する

解決: pythearn2 パッケージをダウンロードしたディレクトリで、setup.py ファイルを...

Apache ab同時負荷ストレステストの実装方法

腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...

Dockerデータボリューム操作の実装

データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...

Ubuntu 16.04 に Docker と nvidia-docker をインストールするための詳細なチュートリアル

目次DockerのインストールNvidia-docker のインストールDockerのインストール1...

実際のプロジェクトでElementUIを使用する手順の詳細な説明

目次1. テーブル自動ソート2. ページング機能3.el-checkbox-group 複数選択ボッ...

PHP クラスにおける static と self の違いの簡単な分析

メソッドが定義されているクラスに応じて、現在のクラスへの静的参照を取得するには、self:: または...

CocosCreatorの共通知識ポイントを整理する

目次1. シーンの読み込み2. ノードを見つける1. ノード検索2. その他のノード操作3. 再生ア...

Linuxの一般的なコマンドでLinuxのmoreコマンドを使用する方法

more は、最もよく使用されるツールの 1 つです。最も一般的な使用方法は、出力コンテンツを表示し...

Windows Server 2016 で Flash を有効にする方法

最近、VMware Horizo​​n を導入してテストしましたが、そのコンソールにはデフォルトで ...