データベース内の正規表現の使用


MySQLデータベースの正規表現
本稿では、MySQLデータベースの一部の正規表現を使用するテストを行い、まず、今回使用したデータベースの内容を観察します.
select * from test;

フィールド名は「name」
xxxx 1000
xxxx 2000
1 point 5
2 point 5
.5 point 5
apple (3 tons)
apple (1 ton)
nothing serious
  • 基本文字マッチング''検索により対応するデータ
  • 入力コード:
    select name from test where name regexp '000';
    

    結果:
    xxxx 1000
    xxxx 2000
    

    まず,我々の正規表現はregexpを用いて識別される単一引用符を用い,対応するデータセットに単一引用符の文字を含むデータを検索する.
    任意の文字の代わりに「.」を使用して検索することもできます.
    select name from test where name regexp '.000';
    
    xxxx 1000
    xxxx 2000
    

    結果は同じであることがわかります
  • orと同様のマッチング
  • を行う.
    コード:
    select name from test where name regexp '1000|2000';
    

    結果:
    xxxx 1000
    xxxx 2000
    

    「|」は実際には「or」つまり「or」と同じ意味であり、この行のコードはor文で接続されているのと同じである
  • 一致文字の一部
  • コード:
    select name from test where name regexp '[12345] point';
    

    結果:
    1 point 5
    2 point 5
    .5 point 5
    

    []の任意の文字を取り出して、単一引用符のデータがデータセット全体に存在するようにすると、このデータはクエリされます.実際[12345]は[1|2|3|4|5]の略であり,後者を用いると同様の結果が得られる.
    コード:
    select name from test where name regexp '[1|2|3|4|5] point';
    

    結果:
    1 point 5
    2 point 5
    .5 point 5
    

    カッコを付けないで試してみましょう.
    select name from test where name regexp '1|2|3|4|5 point';
    
    xxxx 1000
    xxxx 2000
    1 point 5
    2 point 5
    .5 point 5
    apple (3 tons)
    apple (1 ton)
    

    私たちは彼がもっと多くのデータを得ることができることを発見しました.実際にこのコードが探している内容は1または2または3または4または5 pointを含むデータです.これは中括弧の使用についてです.
  • は範囲
  • に一致する.
    [0-9][a-z][A-Z]はいずれも範囲の表現であり、前の例を一致させることもできる[1-5]point'によってコードを得ることができる.
    select name from test where name regexp '[1-5] point';
    

    結果:
    1 point 5
    2 point 5
    .5 point 5
    
  • 特殊文字
  • に一致
    以前は「.『任意の文字を表すことができますが、検索するデータに』がある場合は、どのように検索すればいいのでしょうか.コード:
    select name from test where name regexp '.';
    

    結果:
    xxxx 1000
    xxxx 2000
    1 point 5
    2 point 5
    .5 point 5
    apple (3 tons)
    apple (1 ton)
    nothing serious
    

    直接検索するとすべてのデータが得られます.私たちはを使って特殊な文字を探す必要があります.
    コード:
    select name from test where name regexp '\\.';
    

    結果:
    .5 point 5
    

    いくつかのメタ文字
    メタ文字
    説明
    \\f
    ページをかえる
    \
    折り返し
    \\r
    リターンマッチ
    \\t
    タブ
    \\v
    たてタブ
  • 一致文字クラスおよび複数のインスタンス
  • 通常使用する文字クラステーブルがあります
    クラス#クラス#
    説明
    [:alnum:]
    任意のアルファベットと数字([0-9 a-zA-Z]と同じ)
    [:alpha:]
    任意文字(同[a-zA-Z])
    [:blank:]
    スペースとタブ
    [:cntrl:]
    ASCII制御文字(ASCII 0~31、127)
    [:digit:]
    任意の数字(同[0-9])
    [:graph:]
    [:print:]と同じですが、スペースは含まれません.
    [:lower:]
    任意の小文字(同[a-z])
    [:print:]
    任意の印刷可能文字
    [:punct:]
    [:alnum:]にも[:cntrl:]にもない任意の文字
    [:space:]
    スペースを含む任意の空白文字
    [:upper:]
    任意大文字(同[A-Z])
    [:xdigit:]
    任意の16進数(同[a-fA-F 0-9])
    複数の対応するクラス文字が必要な場合は、1つ以上一致する場合があります.
    メタ文字
    説明
    *
    0個以上の一致
    +
    1つ以上の一致
    ?
    0個または1個
    {n}
    指定された数の一致
    {n,}
    指定した数以上の一致
    {n,m}
    一致数の範囲(m 255未満)
    例:コード:
    select name from test where name regexp '\\([0-9] tons?\\)';
    

    結果:
    apple (3 tons)
    apple (1 ton)
    

    コード:
    select name from test where name regexp '[[:digit:]]{4}';
    

    結果:
    xxxx 1000
    xxxx 2000
    
  • 位置合わせメタ文字
  • 文字の存在を制限することで、検索の効率がさらに向上
    メタ文字
    説明
    ^
    テキストの開始
    $
    テキストの末尾
    [[:<:>
    語の始まり
    [[:>:]]
    語の末尾
    例:最初の文字ビット数または「.」のデータコードを探します.
    select name from test where name regexp '^[0-9\\.]';
    

    結果
    1 point 5
    2 point 5
    .5 point 5
    

    コード:
    select name from test where name regexp '[[:<:>;
    

    結果:
    apple (3 tons)
    apple (1 ton)