MySQL用正則表達(dá)式進(jìn)行搜索功能實(shí)例
一、正則表達(dá)式介紹
- 正則表達(dá)式是用來匹配文本的特殊的串(字符集合)。
- 所有種類的程序設(shè)計(jì)語言、文本編輯器、操作系統(tǒng)等都支持正則表達(dá)式
二、使用MySQL正則表達(dá)式
- MySQL僅支持多數(shù)正則表達(dá)式實(shí)現(xiàn)的一個(gè)很小的子集。
2.1基本字符匹配
REGEXP后所跟的東西作為正則表達(dá)式處理。
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP 正則表達(dá)式;
示例:
mysql> SELECT * FROM userinfo WHERE food LIKE 'le' ORDER BY food; # LIKE匹配整列,故無返回 Empty set (0.00 sec) mysql> SELECT * FROM userinfo WHERE food REGEXP 'le' ORDER BY food; # REGEXP在列值內(nèi)匹配 +----+----------+----------+--------+------+-------+ | id | username | password | status | age | food | +----+----------+----------+--------+------+-------+ | 4 | 小張 | 397 | 0 | 24 | apple | | 1 | 小明 | 12345 | 0 | 18 | nudle | +----+----------+----------+--------+------+-------+ 2 rows in set (0.01 sec)
2.2 OR匹配
為搜索兩個(gè)串之一(或者為這個(gè)串,或者為另一個(gè)串),使用"|"
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '串1|串2';
示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP 'milk|beef'; # 正則表達(dá)式OR操作符 +----------+------+ | username | food | +----------+------+ | 小紅 | beef | | 小剛 | milk | +----------+------+ 2 rows in set (0.00 sec) mysql> SELECT username,food FROM userinfo WHERE food = 'milk' OR food = 'beef'; # 同子句OR +----------+------+ | username | food | +----------+------+ | 小紅 | beef | | 小剛 | milk | +----------+------+ 2 rows in set (0.00 sec)
2.3 匹配幾個(gè)字符之一
匹配特定字符串,通過指定一組"[]"括起來的字符來完成。
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '[特定字符]銜接字符';
示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[bl]e'; # 匹配列值中'e'前為'b'或'l'的列,同'[b|l]e' +----------+-------+ | username | food | +----------+-------+ | 小明 | nudle | | 小紅 | beef | | 小張 | apple | +----------+-------+ 3 rows in set (0.00 sec)
2.4 匹配范圍
集合可用來定義要匹配的一個(gè)或多個(gè)字符,為簡(jiǎn)化這種類型的集合,可使用"[-]"來定義一個(gè)范圍
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '[范圍左端-范圍右端]銜接字符';
示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[a-c]e'; # 匹配列值中'e'前為'a'到'c'的列 +----------+------+ | username | food | +----------+------+ | 小紅 | beef | +----------+------+ 1 row in set (0.00 sec)
2.5 匹配特殊字符
正則表達(dá)式語言由具有特定含義的特殊字符構(gòu)成。為了匹配特殊字符,必須用 \ 為前導(dǎo)
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '\\特殊字符';
示例:
mysql> SELECT username,password FROM userinfo WHERE password REGEXP '\\.'; # 匹配列值中存在特殊字符'.'的列 +----------+----------+ | username | password | +----------+----------+ | 小紅 | 67890. | +----------+----------+ 1 row in set (0.00 sec)
- \或\?:多數(shù)正則表達(dá)式實(shí)現(xiàn)使用單個(gè)反斜杠轉(zhuǎn)義特殊字符,以便能使用這些字符本身。但MySQL要求兩個(gè)反斜杠(MySQL自己解釋一個(gè),正則表達(dá)式庫(kù)解釋另一個(gè))
2.6 匹配字符類
存在找出你自己經(jīng)常使用的數(shù)字、所有字母字符或所有數(shù)字字母字符等的匹配。為更方便工作,可以使用預(yù)定義的字符集,稱為字符類
2.7 匹配多個(gè)實(shí)例
有時(shí)需要對(duì)匹配的數(shù)目進(jìn)行更強(qiáng)的控制。
示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[[:alpha:]]{5}'; # 匹配存在連續(xù)5個(gè)任意字母的列 +----------+-------+ | username | food | +----------+-------+ | 小明 | nudle | | 小張 | apple | +----------+-------+ 2 rows in set (0.00 sec)
2.8 定位符
目前為止的所有例子都是匹配一個(gè)串中任意位置的文本。為了匹配特定位置的文本,需要使用定位符。
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '^[特定文本]'
示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP '^[mi]'; +----------+------+ | username | food | +----------+------+ | 小剛 | milk | | 小浩 | mini | +----------+------+ 2 rows in set (0.00 sec)
- 簡(jiǎn)單的正則表達(dá)式測(cè)試: 可以在不使用數(shù)據(jù)庫(kù)表的情況下用SELECT來測(cè)試正則表達(dá)式。。REGEXP檢查總是返回0(沒有匹配)或1(匹配)。
mysql> SELECT 'hello' REGEXP '^[h]'; +-----------------------+ | 'hello' REGEXP '^[h]' | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec)
三、小結(jié)
本章介紹了正則表達(dá)式的基礎(chǔ)知識(shí),學(xué)習(xí)了如何在MySQL的SELECT語句中通過REGEXP關(guān)鍵字使用它們。
關(guān)鍵詞 | 作用 | 示例 |
---|---|---|
REGEXP | 表示通配符匹配 | SELECT 列名 FROM 表名 WHERE 列名 REGEXP 正則表達(dá)式; |
總結(jié)
到此這篇關(guān)于MySQL用正則表達(dá)式進(jìn)行搜索功能的文章就介紹到這了,更多相關(guān)MySQL正則表達(dá)式搜索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談MySql?update會(huì)鎖定哪些范圍的數(shù)據(jù)
本文主要介紹了記錄一下MySql?update會(huì)鎖定哪些范圍的數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06mysqldump加-w參數(shù)備份數(shù)據(jù)時(shí)需要注意的事項(xiàng)
這篇文章主要介紹了mysqldump加-w參數(shù)備份數(shù)據(jù)時(shí)需要注意的事項(xiàng),需要的朋友可以參考下2014-06-06MySQL定位長(zhǎng)事務(wù)(Identify Long Transactions)的實(shí)現(xiàn)
在MySQL的運(yùn)行中,經(jīng)常會(huì)遇到一些長(zhǎng)事務(wù),本文主要介紹了MySQL定位長(zhǎng)事務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09PhpMyAdmin 配置文件現(xiàn)在需要一個(gè)短語密碼的解決方法
本文主要介紹PhpMyAdmin 配置文件現(xiàn)在需要一個(gè)短語密碼的解決方法,比較實(shí)用,希望能給大家做一個(gè)參考。2016-06-06MySQL下高可用故障轉(zhuǎn)移方案MHA的超級(jí)部署教程
這篇文章主要介紹了MySQL下高可用故障切換方案MHA的超級(jí)部署教程,文中隊(duì)MHA方案的一些特點(diǎn)做了介紹,示例基于Linux系統(tǒng)的服務(wù)器環(huán)境,需要的朋友可以參考下2015-12-12mysql5.7及mysql 8.0版本修改root密碼的方法小結(jié)
這篇文章主要介紹了mysql5.7及mysql 8.0版本修改root密碼方式 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11