MySQL用正則表達式進行搜索功能實例
一、正則表達式介紹
- 正則表達式是用來匹配文本的特殊的串(字符集合)。
- 所有種類的程序設(shè)計語言、文本編輯器、操作系統(tǒng)等都支持正則表達式
二、使用MySQL正則表達式
- MySQL僅支持多數(shù)正則表達式實現(xiàn)的一個很小的子集。
2.1基本字符匹配
REGEXP后所跟的東西作為正則表達式處理。
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP 正則表達式;
示例:
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匹配
為搜索兩個串之一(或者為這個串,或者為另一個串),使用"|"
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '串1|串2';
示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP 'milk|beef'; # 正則表達式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 匹配幾個字符之一
匹配特定字符串,通過指定一組"[]"括起來的字符來完成。
用法:
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 匹配范圍
集合可用來定義要匹配的一個或多個字符,為簡化這種類型的集合,可使用"[-]"來定義一個范圍
用法:
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 匹配特殊字符
正則表達式語言由具有特定含義的特殊字符構(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ù)正則表達式實現(xiàn)使用單個反斜杠轉(zhuǎn)義特殊字符,以便能使用這些字符本身。但MySQL要求兩個反斜杠(MySQL自己解釋一個,正則表達式庫解釋另一個)
2.6 匹配字符類
存在找出你自己經(jīng)常使用的數(shù)字、所有字母字符或所有數(shù)字字母字符等的匹配。為更方便工作,可以使用預(yù)定義的字符集,稱為字符類

2.7 匹配多個實例
有時需要對匹配的數(shù)目進行更強的控制。

示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[[:alpha:]]{5}'; # 匹配存在連續(xù)5個任意字母的列
+----------+-------+
| username | food |
+----------+-------+
| 小明 | nudle |
| 小張 | apple |
+----------+-------+
2 rows in set (0.00 sec)
2.8 定位符
目前為止的所有例子都是匹配一個串中任意位置的文本。為了匹配特定位置的文本,需要使用定位符。

用法:
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)
- 簡單的正則表達式測試: 可以在不使用數(shù)據(jù)庫表的情況下用SELECT來測試正則表達式。。REGEXP檢查總是返回0(沒有匹配)或1(匹配)。
mysql> SELECT 'hello' REGEXP '^[h]'; +-----------------------+ | 'hello' REGEXP '^[h]' | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec)
三、小結(jié)
本章介紹了正則表達式的基礎(chǔ)知識,學(xué)習(xí)了如何在MySQL的SELECT語句中通過REGEXP關(guān)鍵字使用它們。
| 關(guān)鍵詞 | 作用 | 示例 |
|---|---|---|
| REGEXP | 表示通配符匹配 | SELECT 列名 FROM 表名 WHERE 列名 REGEXP 正則表達式; |
總結(jié)
到此這篇關(guān)于MySQL用正則表達式進行搜索功能的文章就介紹到這了,更多相關(guān)MySQL正則表達式搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談MySql?update會鎖定哪些范圍的數(shù)據(jù)
本文主要介紹了記錄一下MySql?update會鎖定哪些范圍的數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
mysqldump加-w參數(shù)備份數(shù)據(jù)時需要注意的事項
這篇文章主要介紹了mysqldump加-w參數(shù)備份數(shù)據(jù)時需要注意的事項,需要的朋友可以參考下2014-06-06
MySQL定位長事務(wù)(Identify Long Transactions)的實現(xiàn)
在MySQL的運行中,經(jīng)常會遇到一些長事務(wù),本文主要介紹了MySQL定位長事務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09
PhpMyAdmin 配置文件現(xiàn)在需要一個短語密碼的解決方法
本文主要介紹PhpMyAdmin 配置文件現(xiàn)在需要一個短語密碼的解決方法,比較實用,希望能給大家做一個參考。2016-06-06
MySQL下高可用故障轉(zhuǎn)移方案MHA的超級部署教程
這篇文章主要介紹了MySQL下高可用故障切換方案MHA的超級部署教程,文中隊MHA方案的一些特點做了介紹,示例基于Linux系統(tǒng)的服務(wù)器環(huán)境,需要的朋友可以參考下2015-12-12
mysql5.7及mysql 8.0版本修改root密碼的方法小結(jié)
這篇文章主要介紹了mysql5.7及mysql 8.0版本修改root密碼方式 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11

