柚子快報激活碼778899分享:mysql SQL-正則表達式
柚子快報激活碼778899分享:mysql SQL-正則表達式
目錄
正則表達式1.常用的正則表達式字符和特殊字符2.正則表達式的用法:3.其他用法:1.量詞2.特殊字符3.分組和引用4.斷言1.操作12.操作23.操作34.操作4
4.案例應用:
正則表達式
正則表達式是一種用來描述字符串模式的工具,它可以用于匹配、查找、替換等操作。正則表達式由字符和特殊字符組成,可以使用這些字符來定義匹配規(guī)則。
1.常用的正則表達式字符和特殊字符
常用的正則表達式字符和特殊字符有:
普通字符:表示匹配該字符本身,如a表示匹配字母"a"。元字符:具有特殊含義的字符,如 . 表示匹配除換行符以外的任意字符。字符類:用[]表示,表示匹配括號內(nèi)的任意一個字符,如 [abc]表示匹配字符"a"、“b"或"c”。反義字符類:用[^] 表示,表示匹配除括號內(nèi)字符以外的任意字符,如 [^abc]表示匹配除"a"、“b”、"c"以外的任意字符。重復字符:用*、+、?表示,分別表示匹配前一個字符0次或多次、1次或多次、0次或1次。邊界匹配:用^、$表示,分別表示匹配字符串的開頭和結(jié)尾。分組:用()表示,可以將多個字符組合為一個整體,如(ab)+表示匹配"ab"、“abab”、"ababab"等。轉(zhuǎn)義字符:用\表示,可以將特殊字符轉(zhuǎn)義為普通字符,如.表示匹配字符"."。
2.正則表達式的用法:
匹配:使用match()函數(shù)可以在字符串中查找匹配正則表達式的部分,并返回一個包含匹配結(jié)果的數(shù)組。查找:使用search()函數(shù)可以在字符串中查找匹配正則表達式的部分,并返回第一個匹配的位置。替換:使用replace()函數(shù)可以將字符串中匹配正則表達式的部分替換為指定的內(nèi)容。分割:使用split()函數(shù)可以根據(jù)正則表達式將字符串分割為多個部分,并返回一個數(shù)組。
3.其他用法:
1.量詞
用來指定前面的字符或字符類的重復次數(shù)。 常用的量詞有:
*:匹配前一個字符0次或多次。 +:匹配前一個字符1次或多次。 ?:匹配前一個字符0次或1次。 {n}:匹配前一個字符恰好n次。 {n,}:匹配前一個字符至少n次。 {n,m}:匹配前一個字符至少n次,最多m次。
2.特殊字符
.:匹配除換行符以外的任意字符。\d:匹配數(shù)字字符。\D:匹配非數(shù)字字符。\w:匹配字母、數(shù)字、下劃線字符。\W:匹配非字母、數(shù)字、下劃線字符。\s:匹配空白字符(空格、制表符、換行符等)。\S:匹配非空白字符。\b:匹配單詞邊界。\B:匹配非單詞邊界。
3.分組和引用
():將多個字符組合為一個整體。 (?:):非捕獲分組,用于只匹配但不捕獲。 \1、\2、…:引用前面的分組,用于匹配相同的內(nèi)容。
4.斷言
(?=...):正向肯定前瞻,用于匹配滿足某個條件的位置。(?!...):正向否定前瞻,用于匹配不滿足某個條件的位置。(?<=...):反向肯定后顧,用于匹配位于某個條件之后的位置。(?
模式描述^匹配輸入字符串的開始位置$匹配輸入字符串的結(jié)束位置.匹配除“\n”之外的任何單個字符[…]字符集合。匹配所包含的任意一個字符。例如,‘[abc]’可以匹配“plain”中的‘a(chǎn)’。[^…]負值字符集合。匹配未包含的任意字符。例如,‘[^abc]’可以匹配“plain”中的‘p’。p1|p2|p3匹配p1或p2或p3。例如,‘z|food’能匹配“z”或“food”?!▃|f)ood’則匹配“zood”或“food”。
模式描述*匹配前面的子表達式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等價于{0,}。+匹配前面的子表達式一次或多次。例如,‘zo+’能匹配“zo”以及“zoo”,但不能匹配“z”。+等價于{1,}。{n}n是一個非負整數(shù)。匹配穩(wěn)定的n次。例如,‘o{2}’不能匹配“Bob”中的‘o’,但是能匹配“food”中的兩個o。{n,m}m和n均為非負整數(shù),其中n<=m。最少匹配n次且最多匹配m次。
正則表達式的用法非常靈活,可以根據(jù)具體的需求來選擇合適的字符、特殊字符、量詞、分組等來構(gòu)建匹配規(guī)則。同時,正則表達式還支持一些高級的特性,如貪婪模式、非貪婪模式、修飾符等,可以進一步擴展正則表達式的功能。
正則表達式的詳細用法還有很多,可以根據(jù)具體的需求來選擇合適的正則表達式和相應的函數(shù)來進行操作。
1.操作1
代碼如下(示例):
-- ^ 在字符串開始處進行匹配
SELECT 'abc' REGEXP '^a';
-- $ 在字符串末尾開始匹配
SELECT 'abc' REGEXP 'a$';
SELECT 'abc' REGEXP 'c$’;
-- . 匹配任意字符
SELECT 'abc' REGEXP '.b';
SELECT 'abc' REGEXP '.c';
SELECT 'abc' REGEXP 'a.';
-- [...] 匹配括號內(nèi)的任意單個字符
SELECT 'abc' REGEXP '[xyz]';
SELECT 'abc' REGEXP '[xaz]';
2.操作2
代碼如下(示例):
-- [^...] 注意 ^ 符合只有在 [] 內(nèi)才是取反的意思,在別的地方都是表示開始處匹配
SELECT 'a' REGEXP '[^abc]';
SELECT 'x' REGEXP '[^abc]';
SELECT 'abc' REGEXP '[^a]';
-- a* 匹配 0 個或多個 a, 包括空字符串。 可以作為占位符使用 . 有沒有指定字符都可以匹配
到數(shù)據(jù)
SELECT 'stab' REGEXP '.ta*b';
SELECT 'stb' REGEXP '.ta*b';
SELECT '' REGEXP 'a*';
-- a+ 匹配 1 個或者多個 a, 但是不包括空字符
SELECT 'stab' REGEXP '.ta+b';
SELECT 'stb' REGEXP '.ta+b';
3.操作3
代碼如下(示例):
-- [^...] 注意 ^ 符合只有在 [] 內(nèi)才是取反的意思,在別的地方都是表示開始處匹配
SELECT 'a' REGEXP '[^abc]';
SELECT 'x' REGEXP '[^abc]';
SELECT 'abc' REGEXP '[^a]';
-- a* 匹配 0 個或多個 a, 包括空字符串。 可以作為占位符使用 . 有沒有指定字符都可以匹配
到數(shù)據(jù)
SELECT 'stab' REGEXP '.ta*b';
SELECT 'stb' REGEXP '.ta*b';
SELECT '' REGEXP 'a*';
-- a+ 匹配 1 個或者多個 a, 但是不包括空字符
SELECT 'stab' REGEXP '.ta+b';
SELECT 'stb' REGEXP '.ta+b';
4.操作4
-- a{m,n} 匹配 m 到 n 個 a, 包含 m 和 n
SELECT 'auuuuc' REGEXP 'au{3,5}c';
SELECT 'auuuuc' REGEXP 'au{4,5}c';
SELECT 'auuuuc' REGEXP 'au{5,10}c';
-- (abc) abc 作為一個序列匹配,不用括號括起來都是用單個字符去匹配,如果要把多個字符
作為一個整體去匹配就需要用到括號,所以括號適合上面的所有情況。
SELECT 'xababy' REGEXP 'x(abab)y';
SELECT 'xababy' REGEXP 'x(ab)*y';
SELECT 'xababy' REGEXP 'x(ab){1,2}y';
4.案例應用:
create_table stb00 as
select * from test01
;
create_table stb01 as
select col_02,col_03 from stb00
where col_03<>'應用程序版本號'
and length(col_03)=12
;
--col_03匹配格式為xx-xx-xxxxxx x代表16進制字符(包括大小寫)
create_table stb02 as
select
col_02,
col_03,
col_03 REGEXP '(^[0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][\.][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][\.][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF]$)'
from
stb01
;
select * from stb02
limit 100000;
柚子快報激活碼778899分享:mysql SQL-正則表達式
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。