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+JS に基づくシンプルな年齢計算ツールの実装

目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...

16進カラーコード(完全版)

赤とピンク、およびそれらの 16 進コード。 #990033 #CC6699 #FF6699 #FF...

新しく作成された MySQL ユーザーの % には localhost が含まれていますか?

通常の説明%はどのクライアントでも接続できることを意味しますlocalhostはローカルコンピュータ...

HTML の空リンク href="#" と href="javascript:void(0)" の違い

# には位置情報が含まれます。デフォルトのアンカーは #top で、これは Web ページの上部です...

選択タグ内のオプションをクリアする3つの方法

方法1コードをコピーコードは次のとおりです。 document.getElementById(&qu...

JavaScriptの基本的なインタラクションの詳細な説明

目次1. 要素の入手方法文書から入手ID取得クラス名 (className) を取得します。タグ名 ...

mysql 複数テーブル接続削除関数の削除

単一のテーブルを削除する: tableName から columnName = value を削除し...

SQL Server の完全バックアップに関する珍しいエラーと解決策

1. エラーの詳細一度、データベース全体のバックアップを手動で実行したときに、次のエラーが発生しまし...

実行中の Docker コンテナにボリュームを動的に追加する方法

以前、Docker コンテナの起動後にボリュームをマウントできるかどうか尋ねられたことがあります。m...

HTML のフォームフォームのメソッド属性の紹介

1 メソッドは、データをサーバーに送信する方法を指定するプロパティです。 2 post と get ...

Docker+nacos+seata1.3.0 のインストールと使用設定チュートリアル

これに先立ち、1日かけてやってみました。Seataは使い方が簡単で超シンプルですが、インストールや設...

Mysql クラシック高レベル/コマンドライン操作 (クイック) (推奨)

サーバーとデータベースの構築方法を学ぶ必要があるため、最近は SQL 言語を独学で学び始めました。デ...

MySQL ステートメントの実行順序と書き込み順序の例の分析

選択ステートメントの完全な構文は次のとおりです。 選択 DISTINCT <選択リスト>...

MySQL 圧縮版 zip のインストールに関する問題の解決策

本日、MySQLの圧縮版をインストールする際に問題が発生しました。サービスが起動できず、2、3時間苦...

JS の 3 つの主要な問題、非同期性とシングルスレッドについて簡単に説明します。

目次シングルスレッド非同期シングルスレッドしかし、開発中にネットワーク リクエストやスケジュールされ...