SQL中的字符串正則表達(dá)式常見示例代碼
正則表達(dá)式的基本概念
所謂正則表達(dá)式(Regular Expression,簡稱regex
或regexp
)是一種用于匹配字符串中字符組合的模式描述工具。它通過一系列特殊的字符和符號來定義一種約定俗成的規(guī)則,用于查找、匹配、替換或驗(yàn)證字符串中的特定內(nèi)容。在表單提交驗(yàn)證、路由映射、文本處理等方面大放異彩,基本上所有編程語言都有特定的一套正則機(jī)制以供程序員使用。
正則表達(dá)式的基礎(chǔ)字符
正則表達(dá)式由普通字符和特殊符號組成,一共可以分為兩種大類。首先是元字符,由特殊符號組成,代表的是正則匹配中的匹配準(zhǔn)則。轉(zhuǎn)義字符通常由特殊符號\
+字符組成,是某種字符表達(dá)類型的統(tǒng)稱,當(dāng)匹配內(nèi)容中本身帶有\
時(shí),需要再添加一個(gè)轉(zhuǎn)義,例如\\
。
元字符
.
:匹配任意一個(gè)字符(除了換行符)。*
:匹配零次或多次的字符或子模式。+
:匹配一次或多次的字符或子模式。?
:匹配零次或一次的字符或子模式。{n}
:匹配重復(fù)n次的字符或子模式。{n,}
:匹配重復(fù)≥n次的字符或子模式。{n,m}
:匹配重復(fù)n到m次的字符或子模式。[]
:匹配方括號內(nèi)的任意一個(gè)字符。[^]
:匹配不在方括號內(nèi)的任意一個(gè)字符。^
:表示匹配字符串以…開頭。$
:表示匹配字符串以…結(jié)尾。()
:分組,用于拆解匹配的內(nèi)容。|
:邏輯或,表示匹配多種模式中的任意一個(gè)。-
:當(dāng)其不在[]
內(nèi)則就代表字符-
,在[]
內(nèi)表示范圍,例如[a-z]
表示任意小寫字符。
轉(zhuǎn)義字符
\d
:匹配任意數(shù)字字符(0-9)。\w
:匹配任意字母或數(shù)字或下劃線字符(等價(jià)于[a-zA-Z0-9_]
)。\s
:匹配任意空白字符(空格、制表符、換行符等)。\b
:匹配單詞的開始與結(jié)束,例如\bword\b
可以匹配字符串中的整個(gè)單詞word
,而不會混淆其他包含word
的內(nèi)容。\D
:匹配任意非數(shù)字字符。\W
:匹配任意非字母、數(shù)字、下劃線字符(等價(jià)于[^a-zA-Z0-9_]
)。\S
:匹配任意非空白字符。
常見的正則示例
- 匹配電子郵件地址
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
解釋:匹配以字母、數(shù)字、點(diǎn)號、下劃線等開頭(可出現(xiàn)一次或多次),后跟@
,再跟轉(zhuǎn)義的.
,最后以域名和頂級域名(字母且至少有兩個(gè)字符)結(jié)尾。
- 匹配日期
\d{4}-\d{2}-\d{2}
解釋:YYYY-MM-DD,匹配四個(gè)數(shù)字,跟-
,后跟兩個(gè)數(shù)字,再跟-
,最后又是兩個(gè)數(shù)字。
- 匹配手機(jī)號碼
^1[3-9]\d{9}$
解釋:以1
開頭,第二位是3
到9
之間的數(shù)字,后面跟著九位數(shù)字結(jié)尾。
- 匹配網(wǎng)頁元素
<[^>]+>(.*)</[^>]+>
解釋:<xxx>…</xxx>。
SQL中應(yīng)用正則表達(dá)式
字符串查找
在SQL中若要應(yīng)用正則表達(dá)式完成字符串查找功能,篩選出滿足條件的記錄時(shí):
SELECT * FROM 表名 WHERE 字符串字段 REGEXP '正則表達(dá)式';
注意:僅字符串字段支持使用REGEXP
+正則語句進(jìn)行查找功能。
字符串替換
在SQL中若要應(yīng)用正則表達(dá)式完成字符串替換功能時(shí):
SELECT regexp_replace(str, pattern, replace_str, occurrence) FROM 表名;
其中:
str
:表示需要應(yīng)用正則替換的字符串表達(dá);pattern
:表示正則表達(dá)式,需要帶上英文引號;replace_str
:表示當(dāng)匹配到樣式后需要將其替換的新字符串表達(dá);occurrence
:取值為整型常量,表示替換的程度,該值取0時(shí)替換掉所有滿足正則條件的匹配子串,大于0時(shí)表示將第幾個(gè)滿足正則條件的匹配子串替換。
常見案例
例題: 查找有效郵箱的用戶
一個(gè)有效的電子郵件具有前綴名稱和域,其中:
- 前綴名稱是一個(gè)字符串,可以包含字母(大寫或小寫),數(shù)字,下劃線
_
,點(diǎn).
和/
或破折號-
; - 前綴名稱必須以字母開頭;
- 域名稱為
@leetcode.com
。
代碼:
SELECT user_id, name, mail FROM Users WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';
總結(jié)
到此這篇關(guān)于SQL中字符串正則表達(dá)式常見示例代碼的文章就介紹到這了,更多相關(guān)SQL字符串正則表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server 2012 安裝圖解教程(附sql2012下載地址)
在安裝微軟最新數(shù)據(jù)庫SQL Server 2012之前,編者先確定一下安裝環(huán)境:Windonws 7 SP1,32位操作系統(tǒng)、CPU是2.1GHz賽揚(yáng)雙核T3500,內(nèi)存2.93GB2013-04-04sqlserver禁止management studio的自動提交事務(wù)
默認(rèn)management studio是自動提交事務(wù),即一個(gè)語句就一個(gè)事務(wù),那么如何禁止其自動提交呢?下面有個(gè)不錯的方法,大家可以參考下2014-06-06