データベース内の正規表現の使用
10902 ワード
MySQLデータベースの正規表現
本稿では、MySQLデータベースの一部の正規表現を使用するテストを行い、まず、今回使用したデータベースの内容を観察します.
フィールド名は「name」基本文字マッチング''検索により対応するデータ 入力コード:
結果:
まず,我々の正規表現はregexpを用いて識別される単一引用符を用い,対応するデータセットに単一引用符の文字を含むデータを検索する.
任意の文字の代わりに「.」を使用して検索することもできます.
結果は同じであることがわかります orと同様のマッチング を行う.
コード:
結果:
「|」は実際には「or」つまり「or」と同じ意味であり、この行のコードはor文で接続されているのと同じである一致文字の一部 コード:
結果:
[]の任意の文字を取り出して、単一引用符のデータがデータセット全体に存在するようにすると、このデータはクエリされます.実際[12345]は[1|2|3|4|5]の略であり,後者を用いると同様の結果が得られる.
コード:
結果:
カッコを付けないで試してみましょう.
私たちは彼がもっと多くのデータを得ることができることを発見しました.実際にこのコードが探している内容は1または2または3または4または5 pointを含むデータです.これは中括弧の使用についてです.は範囲 に一致する.
[0-9][a-z][A-Z]はいずれも範囲の表現であり、前の例を一致させることもできる[1-5]point'によってコードを得ることができる.
結果:特殊文字 に一致
以前は「.『任意の文字を表すことができますが、検索するデータに』がある場合は、どのように検索すればいいのでしょうか.コード:
結果:
直接検索するとすべてのデータが得られます.私たちはを使って特殊な文字を探す必要があります.
コード:
結果:
いくつかのメタ文字
メタ文字
説明
\\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未満)
例:コード:
結果:
コード:
結果:位置合わせメタ文字 文字の存在を制限することで、検索の効率がさらに向上
メタ文字
説明
^
テキストの開始
$
テキストの末尾
[[:<:>
語の始まり
[[:>:]]
語の末尾
例:最初の文字ビット数または「.」のデータコードを探します.
結果
コード:
結果:
本稿では、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
結果は同じであることがわかります
コード:
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)