欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL正則表達(dá)式匹配查詢(含實(shí)例)

 更新時(shí)間:2022年09月29日 09:35:20   作者:DATA數(shù)據(jù)猿  
MySQL中正式表達(dá)式通常被用來檢索或替換符合某個(gè)模式的文本內(nèi)容,根據(jù)指定的匹配模式匹配文中符合要求的特殊字符串,下面這篇文章主要給大家介紹了關(guān)于MySQL正則表達(dá)式匹配查詢的相關(guān)資料,需要的朋友可以參考下

一、正則表達(dá)式介紹

? 在過濾的時(shí)候允許使用匹配、比較和通配符尋找數(shù)據(jù)。對(duì)于基本的過濾,這些可能就足夠了。但是隨著過濾條件復(fù)雜性的增加,where子句本身的復(fù)雜性也有必要增加。

? 這里簡(jiǎn)單介紹一下使用正則表達(dá)式匹配搜索。所有種類的程序設(shè)計(jì)語言、文本編輯器、操作系統(tǒng)都支持正則表達(dá)式。很多程序員都將正則表達(dá)式作為自己必備的技能。熟練使用正則表達(dá)式,可以幫助我們減少很多的麻煩。

? 正則表達(dá)式用正則表達(dá)式語言來建立,正則表達(dá)式語言是用來完成過濾、匹配類工作的一種特殊語言。與其他語言一樣,它用于自己的特殊的語法和指令。

二、使用正則表達(dá)式

? 正則表達(dá)式的作用是匹配文本,將一個(gè)模式與一個(gè)文本串進(jìn)行比較,根據(jù)自定義的模式,過濾出你需要的數(shù)據(jù)。MySQL的正則表達(dá)式只是正則表達(dá)式的一個(gè)子集。

測(cè)試數(shù)據(jù)

mysql> select * from regexp_test;
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
|    4 | zhangsan |
|    5 | lisi     |
|    6 | liwu     |
|    7 | liliu9   |
+------+----------+
7 rows in set (0.00 sec)

1.基本字符匹配

使用like匹配name為xiao的用戶,需要借助通配符%

mysql> select * from regexp_test where name like 'xiao%';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
+------+----------+
3 rows in set (0.01 sec)

mysql> explain select * from regexp_test where name like 'xiao%';

使用regexp匹配name為xiao的用戶,無需借助任何通配符

regexp在列值內(nèi)進(jìn)行匹配,如果被匹配的文本在列值中出現(xiàn),regexp將會(huì)找到他,相應(yīng)的行將被返回。

regexp正則表達(dá)式匹配不區(qū)分大小寫

mysql> select * from regexp_test where name regexp 'xiao';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
+------+----------+
3 rows in set (0.00 sec)

2.OR匹配

使用or匹配多個(gè)符合條件的數(shù)據(jù)

mysql> select * from regexp_test where id = 1 or id = 2;
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
+------+----------+
2 rows in set (0.00 sec)

使用regexp匹配多個(gè)符合條件的數(shù)據(jù)

使用regexp的|功能類似于在select中使用or

mysql> select * from regexp_test where id regexp '1|2';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
+------+----------+
2 rows in set (0.00 sec)

3.模糊匹配

使用or模糊匹配

mysql> select * from regexp_test where id = 1 or id = 2 or id = 8;
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
+------+----------+
2 rows in set (0.00 sec)

使用|匹配其中符合條件的

mysql> select * from regexp_test where id regexp '1|2|8';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
+------+----------+
2 rows in set (0.00 sec)

使用[]匹配符合條件

mysql> select * from regexp_test where id regexp '[128]';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
+------+----------+
2 rows in set (0.00 sec)

4.匹配范圍

[123456789]即為匹配到123456789這個(gè)集合

[1-9]即為匹配到123456789這個(gè)集合

[a-z]匹配任意字母

mysql> select * from regexp_test where name regexp '[a-z]';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
|    4 | zhangsan |
|    5 | lisi     |
|    6 | liwu     |
|    7 | liliu9   |
+------+----------+
7 rows in set (0.00 sec)

mysql> select * from regexp_test where id regexp '[0-9]';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
|    4 | zhangsan |
|    5 | lisi     |
|    6 | liwu     |
|    7 | liliu9   |
+------+----------+
7 rows in set (0.00 sec)

5.匹配特殊字符

.-在正則表達(dá)式中是特殊字符,需要使用兩個(gè)雙引號(hào)\\轉(zhuǎn)義,例如\\-表示查找-,例如\\.表示查找.

原字符說明
\\f換頁
\\n換行
\\r回車
\\t制表
\\v縱向制表

至于為什么要有兩個(gè)反斜杠,MySQL要求需要兩個(gè),一個(gè)是MySQL自身需要,一個(gè)正則表達(dá)式需要

## 模擬插入一條帶.的數(shù)據(jù)
mysql> insert into regexp_test values(8,'z.y');

## 因?yàn)?匹配任意字符,所以會(huì)把所有數(shù)據(jù)都匹配到
mysql> select * from regexp_test where name regexp '.';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
|    4 | zhangsan |
|    5 | lisi     |
|    6 | liwu     |
|    7 | liliu9   |
|    8 | z.y      |
+------+----------+
8 rows in set (0.00 sec)

## 當(dāng)使用兩個(gè)反斜杠轉(zhuǎn)義后,查詢出的結(jié)果和我們的期望一致
mysql> select * from regexp_test where name regexp '\\.';
+------+------+
| id   | name |
+------+------+
|    8 | z.y  |
+------+------+
1 row in set (0.00 sec)

6. 匹配字符類

存在找出經(jīng)常使用使用數(shù)字、所有字母字符或所有數(shù)字字母字符的匹配。為方便使用,可以采取預(yù)定義的字符集,稱為字符類。

說明
[:alnum:]任意字符和數(shù)字,同[a-zA-Z0-9]
[:alpha:]任意字符,同[a-zA-Z]
[:blank:]空格和制表,同[\\t]
[:cntrl:]ASCAII控制字符,ASCAII 0 到31和127
[:digit:]任意數(shù)字,同[0-9]
[:graph:]與[:print:]相同,但不包括空格
[:lower:]任意小寫字母,同[a-z]
[:print:]任意可打印字符
[:punct:]既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:]包括空格在內(nèi)的任意空白字符,同[\\f\\n\\r\\t\\v]
[:upper:]任意大寫字母,同[A-Z]
[:xdigit:]任意十六進(jìn)制數(shù)字,同[a-fA-F0-9]

7.匹配多個(gè)實(shí)例

? 目前為止使用的所有正則表達(dá)式都嘗試匹配單次出現(xiàn)。如果存在一個(gè)匹配,該行被檢索出來,如果不存在,檢索不出任何行。但有時(shí)需要對(duì)匹配的數(shù)目進(jìn)行更強(qiáng)的控制。例如,你可能需要尋找所有的數(shù),不管數(shù)中包含多少數(shù)字,或者你可能想尋找一個(gè)單詞并且能夠適應(yīng)一個(gè)跟隨的字符,等。

元字符說明
*0個(gè)或多個(gè)匹配
+1個(gè)或多個(gè)匹配
??匹配它前面的任何字符的0次活1次出現(xiàn)
{n}指定數(shù)目的匹配
{n,}不少于指定數(shù)目的匹配
{n,m}匹配數(shù)目的范圍(m不超過255)

例一:匹配到滿足xiaoh和xiao的數(shù)據(jù)

mysql> select * from regexp_test where name regexp 'xiaoh?';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
+------+----------+
3 rows in set (0.01 sec)

例二 :仔細(xì)觀察{4}和{1}匹配到數(shù)據(jù)的不同點(diǎn)

## 匹配4個(gè)連續(xù)小寫字母
mysql> select * from regexp_test where name regexp '[a-z]{4}';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
|    4 | zhangsan |
|    5 | lisi     |
|    6 | liwu     |
|    7 | liliu9   |
+------+----------+
7 rows in set (0.00 sec)

## 匹配1個(gè)連續(xù)小寫字母
mysql> select * from regexp_test where name regexp '[a-z]{1}';
+------+----------+
| id   | name     |
+------+----------+
|    1 | xiaoming |
|    2 | xiaohong |
|    3 | xiaohua  |
|    4 | zhangsan |
|    5 | lisi     |
|    6 | liwu     |
|    7 | liliu9   |
|    8 | z.y      |
+------+----------+
8 rows in set (0.00 sec)

8.定位符

? 以上介紹中都是匹配到一個(gè)字符串中任意位置的文本。為了匹配特定位置的文本,可以參考使用定位符:

元字符說明
^文本開始
$文本結(jié)尾
[[:<:]]詞的開始
[[:>:]]詞的結(jié)尾

notes:特別需要注意的是,當(dāng)在`[]`內(nèi)的時(shí)候代表的是否定該集合,當(dāng)在[]外的時(shí)候代表的是文本開始

案例一:匹配以數(shù)字結(jié)尾

mysql> select * from regexp_test where name regexp '[a-z][0-9]$';
+------+--------+
| id   | name   |
+------+--------+
|    7 | liliu9 |
+------+--------+
1 row in set (0.01 sec)

案例二:匹配以數(shù)字開頭

mysql> select * from regexp_test where name regexp '^[0-9][a-z]';
+------+-------+
| id   | name  |
+------+-------+
|    9 | 1zbc  |
|   10 | 1qwr2 |
+------+-------+
2 rows in set (0.00 sec)

案例三:匹配以數(shù)字開頭,以數(shù)字結(jié)尾

mysql> select * from regexp_test where name regexp '^[0-9][a-z]*[0-9]$';
+------+-------+
| id   | name  |
+------+-------+
|   10 | 1qwr2 |
+------+-------+
1 row in set (0.00 sec)

總結(jié)

到此這篇關(guān)于MySQL正則表達(dá)式匹配查詢的文章就介紹到這了,更多相關(guān)MySQL正則表達(dá)式匹配查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux下mysql 5.6.17 安裝圖文教程

    Linux下mysql 5.6.17 安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了Linux下mysql 5.6.17 安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • mysql數(shù)據(jù)庫腳本如何為表添加字段并設(shè)置備注

    mysql數(shù)據(jù)庫腳本如何為表添加字段并設(shè)置備注

    這篇文章主要介紹了mysql數(shù)據(jù)庫腳本如何為表添加字段并設(shè)置備注方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 遠(yuǎn)程連接mysql錯(cuò)誤代碼1130的解決方法

    遠(yuǎn)程連接mysql錯(cuò)誤代碼1130的解決方法

    這篇文章主要介紹了遠(yuǎn)程連接mysql錯(cuò)誤代碼1130的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-12-12
  • 深入mysql并發(fā)插入優(yōu)化詳解

    深入mysql并發(fā)插入優(yōu)化詳解

    本篇文章是對(duì)mysql并發(fā)插入優(yōu)化進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 最新評(píng)論