日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

初识Mysql(part7)--我需要知道的5个关于正则的小知识

發布時間:2023/12/19 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初识Mysql(part7)--我需要知道的5个关于正则的小知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,以代碼和例子堆砌而成,方便查閱。
參考書籍:《Mysql必知必會》等
要點:REGEXP關鍵字、BINARY關鍵字、轉義、字符類、正則測試

因為正則表達式筆者專門寫了一系列Blog,所以這里對正則表達式的用法,不做過多闡述,主要看正則在Mysql中的應用。


此Blog里的例子都會用下面store數據表:

# id, product, price, grade, pro_date, note '1', 'Snob201', '2300.23', 'B', 1998, 'Snob 2000 expand' '2', 'Snob301', '1289.21', 'C', 1996, 'Snob 3000 expand' '3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand' '4', 'GibeX01', '3232.76', 'A', 2000, 'X serise 1' '5', 'GibeX02', '1200.00', 'D', 2000, 'X serise 2' '6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2' '7', 'GibeU300', '3000.78', 'A', 2010, '2.1 X serise 2' '8', 'SnobR001', '6321.54', 'B', 2010, 'R (no.1)' '9', 'SnobR002', '3245.54', 'A', 2011, 'R (no.2)' '10', 'AdroitX001', '6543.90', 'B', 2014, 'Lose' '11', 'AdroitX002', '1050.00', 'D', 2015, 'Lose'

注意!Mysql僅支持多數正則表達式實現的一個很小的子集。

  • 關鍵字LIKE與關鍵字REGEXP

首先,看下面這行sql語句:

SELECT * from store WHERE product REGEXP '200';

輸出:

# id, product, price, grade, pro_date, note '6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2'

我們看到拿到了product='GibeU200’的記錄。

現在我想理順REGEXP和LIKE的區別。

我們把上面的sql語句中的REGEXP替換成LIKE:

SELECT * from store WHERE product LIKE '200';

輸出:

# id, product, price, grade, pro_date, note

啥都沒匹配到。

這是因為REGEXP將找出product中包含’200’的記錄,而LIKE則要找的是product='200’的記錄。如果LIKE想要匹配部分值(與REGEXP語句相同的效果),則需要使用通配符%或通配符_(%200%)。那么怎樣使REGEXP匹配全部值(與LIKE有相同的效果)呢,這時就要用元字符^和元字符$(^200$)

  • 匹配大小寫

首先,來一段代碼:

SELECT * FROM store WHERE product REGEXP 'snob';

輸出:

# id, product, price, grade, pro_date, note '1', 'Snob201', '2300.23', 'B', 1998, 'Snob 2000 expand' '2', 'Snob301', '1289.21', 'C', 1996, 'Snob 3000 expand' '3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand' '8', 'SnobR001', '6321.54', 'B', 2010, 'R (no.1)' '9', 'SnobR002', '3245.54', 'A', 2011, 'R (no.2)'

可以看到,匹配到了5條記錄,但是這里我們用小寫的’snob’就匹配到了大寫的’Snob’,我不想這樣,我想大寫匹配大寫,小寫匹配小寫,這里可以使用BINARY關鍵字來實現:

SELECT * FROM store WHERE product REGEXP BINARY 'snob';

輸出:

# id, product, price, grade, pro_date, note

嗯!不錯,這樣小寫的’snob’就啥也匹配不到了。

  • 轉義

如果我想匹配.可咋整,我們知道.是正則表達式中的元字符,所以我們需要對其進行轉義,方法就是在.之前加\\。來個例子先:

SELECT * FROM store WHERE note REGEXP '2\\.0';

輸出:

# id, product, price, grade, pro_date, note '3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand' '6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2'

多數正則表達式用\單斜杠就能實現轉義的功能,那為啥mysql要用\\雙斜杠呢?這里和python用\\雙斜杠進行轉義的原因差不多,詳見:正則表達式的轉義。

  • 匹配字符類

因為筆者實在懶得打字了,就放圖片吧:

來個字符類的例子:

SELECT * FROM store WHERE note REGEXP '[[:digit:]]{4}';

輸出:

# id, product, price, grade, pro_date, note '1', 'Snob201', '2300.23', 'B', 1998, 'Snob 2000 expand' '2', 'Snob301', '1289.21', 'C', 1996, 'Snob 3000 expand' '3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand'

再來個字符類例子,加深一下印象唄:

SELECT * FROM store WHERE note REGEXP '^[[:digit:]]\\.[0-9]';

輸出:

# id, product, price, grade, pro_date, note '3', 'Snob401', '4876.34', 'A', 2002, '2.0 Snob 3000 expand' '6', 'GibeU200', '5010.12', 'B', 2005, '2.0 X serise 2' '7', 'GibeU300', '3000.78', 'A', 2010, '2.1 X serise 2'
  • 對正則表達式的簡單測試

可以在不使用數據庫的情況下,用SELECT來測試正則表達式,REGEXP檢查將返回0(沒有匹配)或1(匹配),來個例子:

SELECT '應用回歸分析第4版' REGEXP '第[1-9]版';

輸出:

'1'

總結

以上是生活随笔為你收集整理的初识Mysql(part7)--我需要知道的5个关于正则的小知识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。