搜尋
首頁資料庫mysql教程關於MySQL中REGEXP正規表示式使用小結
關於MySQL中REGEXP正規表示式使用小結Jan 13, 2018 pm 01:54 PM
mysqlregexp表達式

以前我要查找資料都是使用like後來發現mysql中也有正規表示式了並且感覺性能要好於like,下面我來給大家分享一下mysql REGEXP正則表達式使用詳解,希望此方法對大家有幫助。

正規表示式描述了一組字串。最簡單的正規表示式是不含任何​​特殊字元的正規表示式。例如,正規表示式hello符合hello。

非平凡的正規表示式採用了特殊的特定結構,從而使得它們能夠與1個以上的字串相符。例如,正規表示式hello|word符合字串hello或字串word。

作為一個更為複雜的範例,正規表示式B[an]*s符合下述字串中的任何一個:Bananas,Baaaaas,Bs,以及以B開始、以s結束、並在其中包含任意數目a或n字元的任何其他字串。

以下是可用來隨REGEXP運算子的資料表的模式。

應用程式範例,尋找用戶表中Email格式錯誤的使用者記錄:


SELECT * 
FROM users
WHERE email NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+.[A-Z]{2,4}$'

MySQL資料庫中正規表達式的語法,主要包括各種符號的意思。

(^)字元

符合字串的開始位置,如「^a」表示以字母a開頭的字串。


mysql> select 'xxxyyy' regexp '^xx';

+-----------------------+
| 'xxxyyy' regexp '^xx' |
+-----------------------+
|           1 |
+-----------------------+
1 row in set (0.00 sec)

查詢xxxyyy字串中是否以xx開頭,結果值為1,表示值為true,滿足條件。

($)字元

符合字串的結束位置,如「X^」表示以字母X結尾的字串。

(.)字符

這個字符就是英文下的點,它匹配任何一個字符,包括回車、換行等。

(*)字符

星號匹配0個或多個字符,在它之前必須有內容。如:


mysql> select 'xxxyyy' regexp 'x*';

這個SQL語句,正規符合為true。

(+)字元

加號符合1個或多個字符,在它之前也必須有內容。加號跟星號的用法類似,只是星號允許出現0次,加號則必須至少出現一次。

(?)字元

問號符合0次或1次。

實例:

現在根據上面的表,可以裝置各種不同類型的SQL查詢以滿足要求。在這裡列出一些理解。考慮我們有一個表為person_tbl和有一個字段名為名稱:

#查詢找到所有的名字以'st'開頭


mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

查詢找到所有的名字以'ok'結尾


mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

查詢找到所有的名字包函'mar'的字串


mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

查詢找到所有名稱以元音開始和'ok'結束的


mysql> SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';

一個正規表示式中的可以使用以下保留字

^

所符合的字串以後面的字串開頭


#
mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配) 
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)

##$

所匹配的字串以前面的字串結尾


mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配) 
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配) 
.

匹配任何字元(包括新行)


#

mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配) 
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)

a*

符合任意多個a(包括空白字串)


mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配) 
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配) 
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)

a+

符合任意多個a(不包括空白字串)


mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配) 
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)

a?

#符合一個或零個a


mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配) 
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配) 
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)

de|abc

匹配de或abc




#

mysql> select "pi" REGEXP "pi|apa"; -> 1(表示匹配) 
mysql> select "axe" REGEXP "pi|apa"; -> 0(表示不匹配) 
mysql> select "apa" REGEXP "pi|apa"; -> 1(表示匹配) 
mysql> select "apa" REGEXP "^(pi|apa)$"; -> 1(表示匹配) 
mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1(表示匹配) 
mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0(表示不匹配)

(abc)*

符合任意多個abc(包括空白字串)

mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配) 
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配) 
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)

{1}

{2,3}

這是一個更全面的方法,它可以實現前面好幾個保留字的功能

a *

可以寫成a{0,}

a+

#可以寫成a{1,}
##a?

可以寫成a{0,1}   在{}內只有一個整數參數i,表示字元只能出現i次;在{}內有一個整數參數i,後面跟一個“, ”,表示字元可以出現i次或i次以上;在{}內只有一個整數參數i,後面跟一個“,”,再跟一個整數參數j,表示字元只能出現i次以上,j次以下(包括i次和j次)。其中的整型參數必須大於等於0,小於等於 RE_DUP_MAX(預設是255)。 如果有兩個參數,第二個必須大於等於第一個

[a-dX]符合「a」、「b」、「c」、「d」或「 X”

###[^a-dX]######符合除「a」、「b」、「c」、「d」、「X」以外的任何字元。 ######「[」、「]」必須成對使用###
mysql> select "aXbc" REGEXP "[a-dXYZ]"; -> 1(表示匹配) 
mysql> select "aXbc" REGEXP "^[a-dXYZ]$"; -> 0(表示不匹配) 
mysql> select "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1(表示匹配) 
mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配) 
mysql> select "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1(表示匹配) 
mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
###相關推薦:############JS正規表示式完美實現身分證校驗功能############怎麼用正規表示式讓JavaScript的程式碼高亮#######

javascript符合js中註解的正規表示式程式碼

#

以上是關於MySQL中REGEXP正規表示式使用小結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

mysql需要commit吗mysql需要commit吗Apr 27, 2022 pm 07:04 PM

在mysql中,是否需要commit取决于存储引擎:1、若是不支持事务的存储引擎,如myisam,则不需要使用commit;2、若是支持事务的存储引擎,如innodb,则需要知道事务是否自动提交,因此需要使用commit。

mysql-connector是什么mysql-connector是什么May 12, 2022 pm 04:04 PM

“mysql-connector”是mysql官方提供的驱动器,可以用于连接使用mysql;可利用“pip install mysql-connector”命令进行安装,利用“import mysql.connector”测试是否安装成功。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)