MYSQL 正規表現 (REGEXP) の構文と例

正規表現とは何ですか?

正規表現は、複雑な条件に一致するデータを検索するのに役立ちます。前回のチュートリアルではワイルドカードについて説明しました。ワイルドカードを使用したことがある場合、ワイルドカードを使用して同様の結果を得ることができるのに、なぜ正規表現を学ぶ必要があるのか​​疑問に思うかもしれません。ワイルドカードと比較して、正規表現ではさらに複雑な条件に一致するデータを検索できるためです。

基本構文

正規表現の基本的な構文は次のとおりです。

SELECT statements... WHERE fieldname REGEXP 'pattern';

ここ -

  • 「SELECT ステートメント…」 標準です SELECTステートメント
  • 「WHERE フィールド名」 正規表現が実行される列の名前です。
  • 「REGEXP 'パターン'」 REGEXP は正規表現演算子であり、'pattern' は REGEXP によって一致するパターンを表します。 RLIKEREGEXP の同義語 REGEXPと同じ結果になります。LIKE演算子との混同を避けるために、 REGEXPを使用する方がよいでしょう を代わりにお使いください。

それでは実際の例を見てみましょう。

SELECT * FROM `movies` WHERE `title` REGEXP 'code';

上記のクエリは、単語コードが含まれるすべての映画タイトルを検索します。 「コード」はタイトルの先頭、途中、末尾のどこにあっても構いません。 タイトルに含まれていれば検討させていただきます。

a、b、c、または d で始まり、その後に他の任意の数の文字が続く映画を検索したいとします。どうすればそれを達成できるでしょうか。 正規表現とメタキャラクターを併用すると、望ましい結果を得ることができます。

SELECT * FROM `movies` WHERE `title` REGEXP '^[abcd]';

上記のスクリプトを実行すると、 MySQL 作業台 myflixdb に対して実行すると、次の結果が得られます。

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6

次に、上記の結果の原因となる正規表現を詳しく見てみましょう。

'^[abcd]' キャレット (^) は、パターン マッチが先頭に適用されることを意味し、文字リスト [abcd] は、a、b、c、または d で始まる映画タイトルのみが結果セットで返されることを意味します。

上記のスクリプトを変更して NOT charlist を使用し、クエリの実行後にどのような結果が得られるかを見てみましょう。

SELECT * FROM `movies` WHERE `title` REGEXP '^[^abcd]';

上記のスクリプトを実行すると、 MySQL myflixdb に対する workbench の結果は次のようになります。

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
3 X-Men 2008
9 Honey mooners John Schultz 2005 8
16 67% Guilty 2012
17 The Great Dictator Chalie Chaplie 1920 7
18 sample movie Anonymous 8
19 movie 3 John Brown 1920 8

次に、上記の結果の原因となる正規表現を詳しく見てみましょう。

'^[^abcd]' キャレット (^) はパターン マッチが先頭に適用されることを意味し、文字リスト [^abcd] は囲まれた文字で始まる映画タイトルが結果セットから除外されることを意味します。

正規表現メタキャラクター

上の例で見たのは、正規表現の最も単純な形式です。 次に、より高度な正規表現パターンの一致を見てみましょう。 正規表現のみを使用してパターン「code」で始まる映画タイトルを検索したいとします。どうすればよいでしょうか? 答えはメタキャラクターです。 これらにより、正規表現を使用してパターン検索結果を微調整できます。

チャー 詳細説明
* 当学校区の アスタリスク(*) メタキャラクターは、その前にある文字列の 0 個以上のインスタンスと一致するために使用されます。 SELECT * FROM 映画 WHERE タイトル REGEXP 'da*'; 文字「da」を含むすべての映画が表示されます。たとえば、「ダ ヴィンチ コード」、「Daddy's Little Girls」などです。
+ 当学校区の プラス(+) メタキャラクターは、その前にある文字列の XNUMX つ以上のインスタンスと一致するために使用されます。 SELECT * FROM `映画` WHERE `タイトル` REGEXP 'mon+'; 文字「mon」を含むすべての映画が表示されます。例: 天使と悪魔。
? 質問(?) メタキャラクターは、その前にある文字列の 0 個または XNUMX 個のインスタンスと一致するために使用されます。 SELECT * FROM `カテゴリ` WHERE `カテゴリ名` REGEXP 'com?'; 文字列 com を含むすべてのカテゴリが表示されます。たとえば、 Comedy 、 Romantic Comedy などです。
. 当学校区の ドット(.) メタキャラクターは、改行を除く任意の単一文字と一致するために使用されます。 SELECT * FROM 映画 WHERE `公開年` REGEXP '200.'; 「200」という文字で始まり、その後に任意の 2005,2007,2008 文字が続く、その年にリリースされたすべての映画が表示されます。たとえば、XNUMX、XNUMX、XNUMX などです。
[ABC] 当学校区の チャーリスト [abc] 囲まれた文字のいずれかと一致するために使用されます。 SELECT * FROM `映画` WHERE `タイトル` REGEXP '[vwxyz]'; 「vwxyz」の任意の XNUMX 文字を含むすべての映画が表示されます。たとえば、X-Men、Da Vinci Code などです。
[^ abc] 当学校区の チャーリスト [^abc] で囲まれた文字を除く任意の文字と一致するために使用されます。 SELECT * FROM `映画` WHERE `タイトル` REGEXP '^[^vwxyz]'; 「vwxyz」以外のキャラクターが含まれるすべてのムービーを提供します。
[AZ] 当学校区の [AZ] は、任意の大文字と一致するために使用されます。 SELECT * FROM `members` WHERE `postal_address` REGEXP '[AZ]'; は、A から Z までの任意の文字を含む住所を持つすべてのメンバーを示します。たとえば、メンバー番号 1 のジャネット ジョーンズなどです。
[az] 当学校区の [az] 任意の小文字と一致するために使用されます SELECT * FROM `members` WHERE `postal_address` REGEXP '[az]'; a から z までの任意の文字を含む住所を持つすべてのメンバーに通知されます。 たとえば、会員番号 1 のジャネット ジョーンズ。
[0-9] 当学校区の [0-9] 0 ~ 9 の任意の数字と一致するために使用されます。 SELECT * FROM `メンバー` WHERE `連絡先番号` REGEXP '[0-9]' 文字「[0-9]」を含む連絡先番号を送信したメンバー全員が表示されます。例: Robert Phil。
^ 当学校区の キャレット (^) 試合を最初から開始するために使用されます。 SELECT * FROM `映画` WHERE `タイトル` REGEXP '^[cd]'; 「cd」のいずれかの文字で始まるタイトルを持つすべての映画を表示します。たとえば、コードネーム ブラック、ダディーズ リトル ガールズ、ダ ヴィンチ コードなどです。
| 当学校区の 縦棒 (|) 代替案を分離するために使用されます。 SELECT * FROM `映画` WHERE `タイトル` REGEXP '^[cd]|^[u]'; 「cd」または「u」のいずれかの文字で始まるタイトルの映画をすべて表示します。たとえば、コードネームブラック、ダディーズリトルガール、ダヴィンチコード、アンダーワールドなどです。 Awakenる。
[[:<:]] 当学校区の[[:<:]] 単語の先頭と一致します。 SELECT * FROM `映画` WHERE `タイトル` REGEXP '[[:<:]]for';

文字で始まるタイトルのすべての映画を提供します。 例: サラ・マーシャルのことは忘れてください。

[[:>:]] 当学校区の [[:>:]] 語尾と一致します。 SELECT * FROM `映画` WHERE `タイトル` REGEXP 'ack[[:>:]]';

タイトルが文字「ack」で終わるすべての映画を表示します

.たとえば、コードネーム ブラック。

[:クラス:] 当学校区の [:クラス:] 文字クラスに一致します。つまり

[:アルファ:] 文字を一致させるには、 [:スペース:] 空白に一致させるには、 [:punct:] は句読点と、上位クラスの文字の [:upper:] に一致します。

SELECT * FROM `映画` WHERE `タイトル` REGEXP '[:alpha:]';

タイトルに文字のみが含まれるすべての映画を表示します

たとえば、サラ・マーシャルやX-MENなどは忘れてください。

パイレーツ オブ カリビアン 4 のような映画は、このクエリでは除外されます。

バックスラッシュ (\) はエスケープ文字として使用されます。正規表現のパターンの一部として使用したい場合は、二重のバックスラッシュ (\\) を使用する必要があります。

製品概要

  • 正規表現は強力かつ柔軟なパターン マッチを提供し、データベース システムに強力な検索ユーティリティを実装するのに役立ちます。
  • REGEXPは正規表現パターンマッチを実行するときに使用される演算子です。RLIKEは同義語です
  • 正規表現は多くのメタキャラクタをサポートしているため、パターン マッチを実行する際の柔軟性と制御が向上します。
  • バックスラッシュは正規表現のエスケープ文字として使用されます。パターン マッチでは、二重のバックスラッシュが使用されている場合にのみ考慮されます。
  • 正規表現では大文字と小文字が区別されません。