Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL正则表达式搜索

MySQL用正则表达式进行搜索功能实例

作者:Just_ Run

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)

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)
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正则表达式搜索内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文