Mysql中正則表達(dá)式Regexp常見用法及說明
Mysql中Regexp常見用法
模糊匹配,包含特定字符串
# 查找content字段中包含“車友俱樂部”的記錄 select * from club_content where content regexp '車友俱樂部' # 此時(shí)的regexp與like的以下用法是等同的 select * from club_content where content like '%車友俱樂部%'
模糊匹配,以特定字符串開頭
# 查找content字段中以“車友”開頭的記錄 select * from club_content where content regexp '^車友' # 此時(shí)的regexp與like的以下用法是等同的 select * from club_content where content like '車友%'
模糊匹配,以特定字符串結(jié)尾
# 查找content字段中以“車友”結(jié)尾的記錄 select * from club_content where content regexp '車友$' # 此時(shí)的regexp與like的以下用法是等同的 select * from club_content where content like '%車友'
模糊匹配,或關(guān)系
# 查找content字段中包含“心得”、“分享”或“技術(shù)貼” select * from club_content where content ?REGEXP '心得|分享|技術(shù)貼'
模糊匹配,不包含單個(gè)字符
# 查找content字段中不包含“車”字、“友”字的記錄 select * from club_content where content ?REGEXP [^車友]
這個(gè)結(jié)果跑出來一看大吃一驚,竟然把所有記錄給跑出來,這是為什么呢?
因?yàn)橐坏┘恿诉@個(gè)方括號(hào)"[]",它就把里面的內(nèi)容拆成單個(gè)的字符再匹配,它會(huì)逐個(gè)字符去匹配判斷是不是等于“車”,或者是不是等于“友“,返回的結(jié)果是一組0、1的邏輯值。
如果想匹配不包含特定字符串,該怎么實(shí)現(xiàn)呢?
模糊匹配,不包含特定字符串
# 查找content字段不包含“車友”字符串的記錄 select * from club_content where content not REGEXP '車友'
Regexp關(guān)鍵字及正則表達(dá)式的常用通配符
在Mysql中使用Regexp關(guān)鍵字來指定正則表達(dá)式的匹配內(nèi)容。
語法:
字段 regexp ‘匹配字符’;
MySQL中使用 REGEXP 操作符來進(jìn)行正則表達(dá)式匹配。根據(jù)正則表達(dá)式的規(guī)則,用來查詢或者替換符合指定要求的內(nèi)容。
–select <字段> from 表 where <字段> REGEXP '通配符/字符';
通配符 | 說明 | 例子 |
---|---|---|
^ | 匹配輸入字符串的開始位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置 | '^b’匹配以字母 b 開頭的字符串 |
$ | 匹配文本的結(jié)束字符,如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置 | ‘st$’ 匹配以 st 結(jié)尾的字符串 |
. | 匹配除 “\n” 之外的任何單個(gè)字符。要匹配包括 ‘\n’ 在內(nèi)的任何字符,請(qǐng)使用像 ‘[.\n]’ 的模式。 | ‘b.t’ 匹配任何 b 和 t 之間有一個(gè)字符 |
| | 或,多匹配符鏈接 | ‘z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 則匹配 “zood” 或 “food”。 |
* | 匹配零個(gè)或多個(gè)在它前面的字符 | zo* 能匹配 “z” 以及 “zoo”。* 等價(jià)于{0,} |
+ | 匹配前面的字符/子表達(dá)式 1 次或多次 | ‘ba+’ 匹配以 b 開頭,后面至少緊跟一個(gè) a;‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等價(jià)于 {1,}。 |
<字符串> | 匹配包含指定字符的文本 | ‘fa’ 匹配包含‘fa’的文本 |
[字符集合] | 匹配字符集合中的任何一個(gè)字符 | ‘[ar]’ 匹配 a 或者 r。 |
[^] | 負(fù)值字符集合; 匹配不包含在括號(hào)中的任何字符 | ‘[^abc]’ 匹配任何不包含 a、b 或 c 的字符串 |
字符串{n,} | n 是一個(gè)非負(fù)整數(shù).匹配前面的字符串n 次 | ‘e{2}’ 匹配 2 個(gè)或多個(gè)的 e, 例如:feed |
字符串 {n,m} | m 和 n 均為非負(fù)整數(shù),其中n <= m。匹配前面的字符串 n至 m 次 | ‘b{2,4}’ 匹配最少 2 個(gè),最多 4 個(gè),例如baby |
示例:
#匹配符合要求的多個(gè)字符/字符串 --字符*和+都可以匹配多個(gè)該符號(hào)之前的字符。不同的是,,而*可以表示 0 個(gè)字符。 '--select <字段> from 表 where <字段> REGEXP '字符1+'; '--+結(jié)果匹配‘字符1'一次或多次 --select <字段> from 表 where <字段> REGEXP '^字符1*'; --匹配‘字符1' 0次或多次 #匹配指定的字符/字符串,需要匹配多個(gè)的場(chǎng)合,使用‘|'分號(hào)隔開。 '--select <字段> from 表 where <字段> REGEXP '字符1|字符2|字符3*'; #查詢以特定字符或字符串開頭的數(shù)據(jù) '--select <字段> from 表 where <字段> REGEXP '^字符'; #匹配指定字符以外的字符 '--select <字段> from 表 where <字段> REGEXP '[^字符1~字符3]*'; #查詢以特定字符或字符串結(jié)尾的數(shù)據(jù) '--select <字段> from 表 where <字段> REGEXP '字符$'; #替代字符串中的任意一個(gè)字符,例如:a.b =acb,adb '--select <字段> from 表 where <字段> REGEXP '字符1.字符2'; '#查詢可以匹配指定字符串中的任意一個(gè)字符的字符串 '--select <字段> from 表 where <字段> REGEXP '[字符1字符2字符3]*'; '#查詢陪陪指定集合的區(qū)間內(nèi)容的數(shù)據(jù) #[a-z]”表示從 a~z 的所有字母;“[0-9]”表示從 0~9 的所有數(shù)字; “[a-z0-9]”表示包含所有的小寫字母和數(shù)字;“[a-zA-Z]”表示匹配所有字符。 '--select <字段> from 表 where <字段> REGEXP '[字符1~字符3]*'; #使用{n,}或者{n,m}來指定字符串連續(xù)出現(xiàn)的次數(shù) '--select <字段> from 表 where <字段> REGEXP '匹配的字符{匹配次數(shù),}*'; 例: --billy,silaly,tilly '--select name from namestd where name regexp 'l{2,}; '--select <字段> from 表 where <字段> REGEXP '匹配的字符{匹配次數(shù)1,匹配次數(shù)2}'; '例:--LiMing,Lily,LiPingPing 匹配字母“i” 一至三次 '--select name from namestd where name regexp 'i{1,3};
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MySQL中REGEXP正則表達(dá)式使用大全
- MySQL中使用replace、regexp進(jìn)行正則表達(dá)式替換的用法分析
- mysql數(shù)據(jù)庫(kù)replace、regexp的用法
- Mysql中正則表達(dá)式Regexp常見用法
- 老生常談MYSQL模式匹配 REGEXP和like的用法
- mysql模糊查詢like和regexp小結(jié)
- mysql模糊查詢like與REGEXP的使用詳細(xì)介紹
- MySQL正則表達(dá)式REGEXP使用詳解
- MySQL regexp 命令詳解
- MySql比較運(yùn)算符正則式匹配REGEXP的詳細(xì)使用詳解
- MYSQL中REGEXP的實(shí)現(xiàn)示例
相關(guān)文章
如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù)
這篇文章主要介紹了如何使用Maxwell實(shí)時(shí)同步mysql數(shù)據(jù),幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-04-04MySQL實(shí)戰(zhàn)窗口函數(shù)SQL分析班級(jí)學(xué)生考試成績(jī)及生活消費(fèi)
這篇文章主要為大家介紹了MySQL實(shí)戰(zhàn),利用窗口函數(shù)SQL來分析班級(jí)學(xué)生的考試成績(jī)及生活消費(fèi)的示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10Navicat異地自動(dòng)備份MySQL方法詳解(圖文)
Navicat異地自動(dòng)備份MySQL方法詳解,使用Navicat的需要備份mysql的朋友也方便了2012-01-01mysql中datetime類型設(shè)置默認(rèn)值方法
下面小編就為大家分享一篇mysql中datetime類型設(shè)置默認(rèn)值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-02-02MySQL存儲(chǔ)引擎應(yīng)用場(chǎng)景MyISAM?vs?InnoDB優(yōu)勢(shì)選擇
這篇文章主要為大家介紹了MySQL存儲(chǔ)引擎應(yīng)用場(chǎng)景MyISAM?vs?InnoDB優(yōu)勢(shì)選擇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10