MySQL用正则表达式进行搜索功能实例
作者:Just_ Run
MySQL中的正则表达式是一种强大的文本匹配工具,它允许你使用特定的模式来搜索、替换或检查字符串中的数据,这篇文章主要介绍了MySQL用正则表达式进行搜索功能的相关资料,需要的朋友可以参考下
一、正则表达式介绍
- 正则表达式是用来匹配文本的特殊的串(字符集合)。
- 所有种类的程序设计语言、文本编辑器、操作系统等都支持正则表达式
二、使用MySQL正则表达式
- MySQL仅支持多数正则表达式实现的一个很小的子集。
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在列值内匹配 +----+----------+----------+--------+------+-------+ | 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 匹配特殊字符
正则表达式语言由具有特定含义的特殊字符构成。为了匹配特殊字符,必须用 \ 为前导
用法:
SELECT 列名 FROM 表名 WHERE 列名 REGEXP '\\特殊字符';
示例:
mysql> SELECT username,password FROM userinfo WHERE password REGEXP '\\.'; # 匹配列值中存在特殊字符'.'的列 +----------+----------+ | username | password | +----------+----------+ | 小红 | 67890. | +----------+----------+ 1 row in set (0.00 sec)
- \或\?:多数正则表达式实现使用单个反斜杠转义特殊字符,以便能使用这些字符本身。但MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式库解释另一个)
2.6 匹配字符类
存在找出你自己经常使用的数字、所有字母字符或所有数字字母字符等的匹配。为更方便工作,可以使用预定义的字符集,称为字符类
2.7 匹配多个实例
有时需要对匹配的数目进行更强的控制。
示例:
mysql> SELECT username,food FROM userinfo WHERE food REGEXP '[[:alpha:]]{5}'; # 匹配存在连续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)
- 简单的正则表达式测试: 可以在不使用数据库表的情况下用SELECT来测试正则表达式。。REGEXP检查总是返回0(没有匹配)或1(匹配)。
mysql> SELECT 'hello' REGEXP '^[h]'; +-----------------------+ | 'hello' REGEXP '^[h]' | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec)
三、小结
本章介绍了正则表达式的基础知识,学习了如何在MySQL的SELECT语句中通过REGEXP关键字使用它们。
关键词 | 作用 | 示例 |
---|---|---|
REGEXP | 表示通配符匹配 | SELECT 列名 FROM 表名 WHERE 列名 REGEXP 正则表达式; |
总结
到此这篇关于MySQL用正则表达式进行搜索功能的文章就介绍到这了,更多相关MySQL正则表达式搜索内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!