概要 前の章では、クエリのフィルター条件について学習しました。MySQL では、like % ワイルドカードを使用してあいまい一致を実行できることを学びました。同様に、他の正規表現のマッチングもサポートしています。正規表現のマッチングを実行するには、MySQL の REGEXP 演算子を使用します。使い方といいね に似ていますが、はるかに強力であり、非常に特殊で複雑なルール マッチングを実現できます。 REGEXP コマンドを使用して正規表現が一致すると、一致が真であれば 1 が返され、一致が真でなければ 0 が返されます。デフォルトで一致するルールが追加されていない場合、REGEXP は '%%' と同等になります。前に NOT を追加すると (NOT REGEXP)、NOT LIKE と同じになります。 マッチングパターン分析 次の表は、REGEXP 演算子に適用できる正規表現一致パターンの一覧です。説明は比較的詳細です。後で 1 つずつテストします。
一致するパターン ^ 文字列の最初の部分を一致させます。これは s で始まる文字列と一致します。一致する場合は 1 を返します。一致しない場合は 0 を返します。テーブルに適用すると、一致するデータが返されます。 mysql> 'selina' REGEXP '^s' を選択します。 +----------------------+ | 'selina' 正規表現 '^s' | +----------------------+ | 1 | +----------------------+ セット内の1行 mysql> 'aelina' REGEXP '^s' を選択します。 +----------------------+ | 'aelina' 正規表現 '^s' | +----------------------+ | 0 | +----------------------+ セット内の1行 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 5行セット mysql> user2 から * を選択します where name REGEXP '^s'; +----+--------+-----+--------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+--------+-----+ | 3 | ソル | 21 | 厦門 | 0 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+--------+-----+ 2行セット 一致するパターン $ 文字列の末尾から一致します。これは、名前が d で終わるデータと一致します。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 5行セット mysql> user2 から * を選択し、名前 REGEXP 'd$' を指定します。 +----+-------+-----+--------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+-------+-----+--------+-----+ | 1 | ブランド | 21 | 福州 | 1 | +----+-------+-----+--------+-----+ セット内の1行 一致するパターン。 . は任意の 1 文字に一致します。次のスクリプトは、n の後に任意の文字が続くものに一致します。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 5行セット mysql> user2 から * を選択します。 where name REGEXP 'n.'; +----+--------+-----+--------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+--------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+--------+-----+ 3行セット 一致するパターン [...] 少なくとも 1 つの文字が条件を満たしていれば、括弧内の任意の 1 文字と一致することを意味します。次の例では、名前 brand と weng のみが b、w、z と一致できます。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 5行セット mysql> user2 から * を選択します。 where name REGEXP [bwz]; 1064 - SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の '[bwz]' 付近で使用する正しい構文を確認してください。 mysql> user2 から * を選択します。名前は REGEXP '[bwz]' です。 +----+-------+-----+--------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+-------+-----+--------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 4 | 翁 | 33 | 貴州 | 1 | +----+-------+-----+--------+-----+ 2行セット 一致するパターン [^...] [^...] は文字列に含まれていない任意の文字と一致することを意味します。たとえば、「[^brand]」は「helen」の「h」、「sol」の「s」、「weng」の「w」、および「selina」の「s」に一致しますが、「brand」には一致しないため、フィルタリングされます。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 5行セット mysql> user2 から * を選択します。名前は REGEXP '[^brand]' です。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 4行セット マッチングモード[nm] [0-9]、[az]、[AZ] など、m と n の間の任意の 1 文字と一致します。次のコードでは、a から e の間にない要素 "sol" はすべて除外されます。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 5行セット mysql> user2 から * を選択します。名前は REGEXP '[ae]' です。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 4行セット 一致するパターン* 直前の部分式と 0 回以上一致します。たとえば、a* は「a」と「ab」に一致します。 * {0,} と同等です。 次の「e*g」は名前「weng」にのみ一致します。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 5行セット mysql> user2 から * を選択します。名前は REGEXP 'e*g' です。 +----+------+-----+--------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+------+-----+--------+-----+ | 4 | 翁 | 33 | 貴州 | 1 | +----+------+-----+--------+-----+ セット内の1行 マッチングモード+ 直前の部分式と 1 回以上一致します。たとえば、「a+」は「ab」や「abc」に一致しますが、「a」には一致しません。 + は {1,} と同等です。以下のスクリプトに示すように、条件は 1 から n 個以上の組み合わせと d によって満たされ、"brand" と "annd" のみが条件を満たします。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+--------+-----+----------+-----+ 7行セット mysql> user2 から * を選択します。 where name REGEXP 'n+d'; +----+-------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+-------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 7 | そして | 24 | 上海 | 1 | +----+-------+-----+----------+-----+ 2行セット マッチングモード? 直前の部分式と 1 回以上一致します。たとえば、「a?」は「ab」と「a」に一致します。 ? は {0,1} と同等です。 e は 1 または 0 であり、l によって制限されるため、要件を満たすのは 3 つだけです。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+--------+-----+----------+-----+ 7行セット mysql> user2 から * を選択します。名前が REGEXP 'e?l' の場合; +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 3行セット パターンa1| a2|a3に一致します a1 または a2 または a3 に一致します。たとえば、以下の「nn|en」はそれぞれ「anny」、「annd」および「helen」、「weng」に一致します。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+--------+-----+----------+-----+ 7行セット mysql> user2 から * を選択します。name REGEXP 'nn|en'; +----+-------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+-------+-----+----------+-----+ | 2 | ヘレン | 20 | 泉州 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+-------+-----+----------+-----+ 4行セット パターン {n} {n,} {n,m} {,m} に一致します n と m はどちらも負でない整数です (n <= m)。少なくとも n 回、最大 m 回一致します。 m は空で n 以上の任意の数を表し、n は空で 0 を表します。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+--------+-----+----------+-----+ 7行セット mysql> user2 から * を選択します。名前 REGEXP 'n{2}'; +----+------+-----+---------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+------+-----+---------+-----+ | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+------+-----+---------+-----+ 2行セット mysql> user2 から * を選択します。ここで、名前は REGEXP 'n{1,2}' です。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+--------+-----+----------+-----+ 6行セット mysql> user2 から * を選択します。名前は REGEXP 'l{1,}' です。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 5 | セリーナ | 25 | NULL | 0 | +----+--------+-----+----------+-----+ 3行セット パターンに一致します(...) 括弧の内容が abc であると仮定すると、abc 全体が一致し、このルールを満たすデータがフィルタリングされます。を例に挙げて、上で学んだ知識と組み合わせてみましょう。 mysql> user2 から * を選択します。 +----+--------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+--------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 2 | ヘレン | 20 | 泉州 | 0 | | 3 | ソル | 21 | 厦門 | 0 | | 4 | 翁 | 33 | 貴州 | 1 | | 5 | セリーナ | 25 | NULL | 0 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+--------+-----+----------+-----+ 7行セット mysql> user2 から * を選択します。name REGEXP '(an)+'; +----+-------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+-------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+-------+-----+----------+-----+ 3行セット mysql> user2 から * を選択します。名前は REGEXP '(ann)+' です。 +----+------+-----+---------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+------+-----+---------+-----+ | 6 | アニー | 23 | 上海 | 0 | | 7 | そして | 24 | 上海 | 1 | +----+------+-----+---------+-----+ 2行セット mysql> user2 から * を選択します。名前は REGEXP '(an).*d{1,2}' です。 +----+-------+-----+----------+-----+ | ID | 名前 | 年齢 | 住所 | 性別 | +----+-------+-----+----------+-----+ | 1 | ブランド | 21 | 福州 | 1 | | 7 | そして | 24 | 上海 | 1 | +----+-------+-----+----------+-----+ 2行セット 特殊文字に一致します \\ 正規表現言語は、特定の意味を持つ特殊文字で構成されています。 .、[]、|、*、+ などを見てきました。これらの文字をどのように一致させるのでしょうか?次の例では、特殊文字を一致させるために \\ を使用します。\\ は先頭文字、\\- は - の検索を意味し、\\. は . の検索を意味します。 mysql> user3 から * を選択します。 +----+------+-------+ | ID | 年齢 | 名前 | +----+------+-------+ | 1 | 20 | ブランド | | 2 | 22 | ソル | | 3 | 20 | ヘレン | | 4 | 19.5 | 日 | +----+------+-------+ 4行セット mysql> select * from user3 where age REGEXP '[0-9]+\\.[0-9]+'; +----+------+------+ | ID | 年齢 | 名前 | +----+------+------+ | 4 | 19.5 | 日 | +----+------+------+ セット内の1行 要約する 1. 正規表現を使用してデータを一致させる必要がある場合は、REGEXP 演算子と NOT REGEXP 演算子 (LIKE と NOT LIKE に類似) を使用できます。 2. REGEXP はデフォルトでは大文字と小文字を区別しませんが、BINARY キーワードを使用して大文字と小文字を区別するように強制できます。WHERE NAME REGEXP BINARY '^[AZ]'; 3. REGEXP はデフォルトで部分一致になり、一致する場合は true を返します。たとえば、SELECT 'A123' REGEXP BINARY '[AZ]' は 1 を返します。 4. () を使用して一致させる場合、括弧内のコンテンツ全体が一致します。たとえば、(ABC) は ABC 全体に一致する必要があります。 5. これは正規表現の基本の紹介にすぎません。より深く理解したい場合は、よく書かれている正規表現のチュートリアルを参照してください。 これで、MySQL クエリの正規マッチングの詳細な説明に関するこの記事は終了です。MySQL クエリの正規マッチングの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker ベースの GitLab 環境をデプロイする方法と手順
>>: JS配列メソッドsome、every、findの使用に関する詳細
環境説明:実行中の MySQL 環境があります。以前の構成ファイルの設定が単純すぎたため (inno...
並べ替えツールLinux の sort コマンドは、テキスト ファイルの内容を並べ替えるために使用さ...
フレックスレイアウトFlex は Flexible Box の略で、「柔軟なレイアウト」を意味します...
エラーを報告するには次のコマンドを実行しますsystemctl dockerを再起動しますエラーメッ...
序文面接中、多くの面接官は「keep-alive が何をするのか知っていますか?」と質問する際に V...
この記事では、主に HTML のサンプル コードを紹介し、次のように交互に色を変更する方法を共有しま...
以下のデモはMySQLバージョン5.7.27に基づいています。 1. MySQLサブクエリ最適化戦略...
異なるサーブレット パスを構成するときに、次の 2 つのエラーが発生しました。 java.lang....
なぜ詰まっているのでしょうか?言及しなければならない前提があります。フロントエンド開発者は皆、ブラウ...
インデックス定義: ディスク上に保存される個別のデータベース構造であり、データ テーブル内のすべての...
序文私が作成中の Markodwn エディターに同期スクロール機能を追加する必要があります。Baid...
フォームのアクションは URL ジャンプとは異なります。フォームはバックグラウンドにデータを渡すこと...
この記事では、適切なスライドアウトレイヤーアニメーションを実装するためのVueの具体的なコードを例と...
XHTML は CSS レイアウトの基礎です。jb51.net は常に XHTML 知識の習得を重視...
前面に書かれた最近、ある読者から、ブラウザからサーバーにアクセスすると、画像の表示が遅く、ブラウザに...