MySQL - 正規表現の使用

MySQL - 正規表現の使用

正規表現は、パターンとテキスト文字列を比較することによってテキストを照合します。たとえば、正規表現を使用すると、ファイルから電話番号を抽出したり、記事内で繰り返される単語を検索したり、記事内の機密用語を置き換えたりすることができます。正規表現は強力かつ柔軟であり、非常に複雑なクエリによく使用されます。

MySQL では、REGEXP キーワードは、正規表現の文字一致パターンを指定するために使用されます。where 句は、正規表現の予備的なサポートを提供します。その基本的な構文形式は次のとおりです。

属性名 REGEXP '匹配方式'

「属性名」はクエリ対象のフィールドの名前を示し、「照合方法」はクエリとの照合方法を示します。「マッチング方法」にはパターンマッチング文字が多数あり、それぞれ異なる意味を表します。次の表に、REGEXP 演算子で一般的に使用される一致方法を示します。
ここに画像の説明を挿入します

正規表現ユニバーサル文字テーブル
   

基本的な文字マッチング

    非常に単純な例から始めましょう。テキスト内に「プロジェクト」テキストを含むすべての行を取得します。このステートメントはあいまい一致に非常によく似ています。これは、like を REGEXP に置き換えるだけです。では、なぜ時々正規表現を使用するのでしょうか?一致の代わりにとりあえずボタンを押してみます 最後に、この2つのマッチング方法を比較してまとめておきます。

 select profession from tb_user where profession REGEXP '工程';

ここに画像の説明を挿入します
    

単一の文字と一致する

    「.」は、テキスト内の任意の文字と一致するために正規表現で使用される特殊文字で、英数字と中国語のテキストを置き換えることができます。

select profession from tb_user where profession  REGEXP '.程';

ここに画像の説明を挿入します
    

ORマッチングを実行する

    検索条件が 2 つ以上のテキスト文字列 (この文字列または他の文字列) の 1 つである場合、使用または一致する必要があり、使用される文字は「|」です。

select email from tb_user where email REGEXP 'qq|sina';

ここに画像の説明を挿入します
    上記のステートメントは、qq または sina メールボックスを使用してテーブル内のメールボックス番号を照合するために使用されます。2 つ以上の or 条件に一致する場合は、上記の例に従って「|」記号を追加して、対応する文字列と一致させます。

    任意の 1 文字だけを一致させたい場合は、「[]」記号を使用する必要があります。

select email from tb_user where email REGEXP '[abc]ao';

ここに画像の説明を挿入します
    このコードの機能は、電子メール データ セグメント内の a/b/c で始まり、その後「ao」に接続されるメールボックス番号を照合することです。

    実際、「[]」は「|」の別の表現形式ですが、後者の代わりに前者を使用する必要があるのはどのような場合ですか? 以下に例を使用して状況を説明します。

 select email from tb_user where email REGEXP 'a|b|cao';

ここに画像の説明を挿入します
    上記コマンドで表現する意味は「[]」を使用した場合と同じですが、得られる結果が異なるのはなぜでしょうか。これは、このステートメント MySQL は、メールボックス番号を「a」、「b」、または「cao」と一致させたいと想定しているため、得られる結果は私たちが望むものではありません。この場合、「[]」を使用する必要があります。 " で各電子メール番号を区切ります。文字はセットで囲まれています。それ以外の場合は、この文字列に適用されます。

    1 つ以上の文字に一致するようにセットを定義することもできます。たとえば、[0-9] は任意の数字に一致し、[aZ] は任意のアルファベット文字に一致します。

select email from tb_user where email REGEXP '[0-3]';

ここに画像の説明を挿入します
    

特殊文字と一致する

    正規表現は、「.」、「[]」、「|」など、特定の意味を持つ特殊文字で構成されます。では、テキスト内のこれらの特殊文字と一致させたい場合は、どのように実装すればよいでしょうか?
    一部の特殊文字を照合する場合は、\\ をリーダーとして使用する必要があります。たとえば、\\- はテキスト セグメント内の - を検索することを意味します。この処理はエスケープと呼ばれ、正規表現で特別な意味を持つ文字はすべてこの方法でエスケープする必要があります。(\ と一致させたい場合は、「\\」を使用して一致させる必要があります)

select email from tb_user where email REGEXP '\\.';

ここに画像の説明を挿入します

列の値に「.」が含まれるメールボックス番号と一致します。
    

複数のインスタンスを照合する

    以前に使用されたすべての一致パターンは、単一の出現に一致します。一致の数をより強力に制御したい場合は、メタ文字を繰り返して完了する必要があります。これらの文字は、最初の表にリストされています。
ここに画像の説明を挿入します
    たとえば、テキスト中に「[666] eng」が存在するかどうかを調べたい場合は、メタ文字の繰り返しを使用できます。次の例では 3 つの異なる検索方法を示しています。上の表を参照することで、対応する意味を知ることができます。ここには違いはありません。ただし、繰り返されるメタキャラクターは、その前に出現する文字の出現数を一致させるために使用されるため、その前の文字に対してのみ有効であることに注意してください。

1:select profession from tb_user where profession REGEXP '\\[[0-9]+ eng\\]';
2:select profession from tb_user where profession REGEXP '\\[[0-9]* eng\\]';
3:select profession from tb_user where profession REGEXP '\\[[0-9]{3,} eng\\]';

ここに画像の説明を挿入します
    

ロケータ

特定の場所でテキストを一致させたい場合は、ロケーターを使用する必要があります。
^ はテキストの先頭に一致し、$ はテキストの末尾に一致します

select profession from tb_user where profession REGEXP '^软';

ここに画像の説明を挿入します
    
^ は正規表現では 2 つの目的があります。セット "[]" で使用すると、セット内の内容を否定することを意味します。その他の場合は、ロケーターとして機能します。
    

正規表現の比較やあいまい一致など

    like は、列値全体が一致するかどうかを比較するために使用されます。like の一致に使用されるテキストが列値に含まれていても、完全な列値の形式で存在しない場合、like はそれを検索できません (ワイルドカード文字 % を除く)使用されている)。
正規表現は列値内で一致します。一致したテキストが列値に出現する場合、それを見つけることができます。
簡単に言うと、like は文字列の内容全体と一致する必要がありますが、regexp は部分文字列と一致することができます。これは非常に重要な違いです。

おすすめ

転載: blog.csdn.net/ccjjjjdff/article/details/130789871