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 のバグの解決方法

推薦する

HTML テーブル タグ チュートリアル (36): テーブル ヘッダーの背景色属性 BGCOLOR

<TH> タグは、テーブル内のヘッダーのプロパティを設定するために使用されます。以下の...

js キャンバスは検証コードを実装し、検証コード機能を取得します

この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...

docker-maven-pluginを使用してデプロイメントを自動化する方法を説明します

1. docker-maven-pluginの紹介私たちの継続的インテグレーションプロセスでは、プロ...

カルーセル例の JS 実装

この記事では、カルーセルチャートの小さなケースを実装するためのJSの具体的なコードを参考までに共有し...

Gearman + MySQL による永続化操作例

この記事では、gearman+mysql メソッドを使用して永続化操作を実装します。ご参考までに、詳...

テキストの折り畳み特殊効果を実現する HTML+CSS の例

この記事では、主に HTML + CSS を使用してテキストの折りたたみ特殊効果を実現する例を紹介し...

MySQL でインデックスとして B+Tree を使用する利点は何ですか?

目次データベースにインデックスが必要なのはなぜですか?インデックスが B+Tree データ構造を使用...

Vueはプルダウンを実装してさらに読み込む

Element-UI に慣れた開発者なら、無限スクロールの InfiniteScroll が使いにく...

MySQL統計の概要

MySQL は、SQL 解析とクエリ最適化のプロセスを通じて SQL を実行します。パーサーは SQ...

CSS3 アニメーション – ステップ機能の説明

最近、CSS3 アニメーションのソース コードの実装をいくつか見ていたところ、CSS コード アニメ...

Vue2 キューブUI 時間セレクターの詳細な説明

目次序文1. 需要と効果必要効果2. コードの実装index.vue(html)日付方法テスト結果3...

VirtualBox を使用して Linux クラスターをシミュレートする方法

1. ホストMacbookにHOSTをセットアップする前回のドキュメントでは仮想マシンの静的 IP ...

docker run -v はデータボリュームを異常にマウントし、コンテナのステータスは常に再起動になります。

問題点: docker run に -v パラメータを追加すると、コンテナは常に再起動状態になります...

Javascriptの基礎を学ぶための10の重要な質問

目次1. Javascript とは何ですか? 2. DOMとは何か3. JSコードの実行方法4. ...

HTML スライドフローティングボールメニュー効果の実装

CSS スタイル html,本文{ 幅: 100%; 高さ: 100%; マージン: 0;パディング...