MySQL基础教程
01、MySQLMariaDB 基础教程
02、MySQL 简介
03、MySQL MariaDB 安装
04、MySQL 管理
05、MySQL 日常管理
06、MySQL PHP 语法
07、MySQL 创建连接
08、MySQL 获取数据库列表
09、MySQL 创建数据库
10、MySQL 删除数据库
11、MySQL 选择数据库
12、MySQL 数据类型
13、MySQL 列出数据表
14、MySQL 创建数据表
15、MySQL 删除表
16、MySQL 插入数据
17、MySQL 获取插入数据的 ID
18、MySQL SELECT FROM 查询数据
19、MySQL WHERE 子句有条件的查询数据
20、MySQL UPDATE 更新数据
21、MySQL DELETE FROM 语句删除数据
22、MySQL 返回删改查受影响的行数
23、MySQL LIKE 子句模糊查询数据
24、MySQL UNION 操作符查询多张表
25、MySQL ORDER BY 排序
26、MySQL GROUP BY 分组查询数据
27、MySQL JOIN 进行多表查询
28、MySQL NULL 值处理
29、MySQL REGEXP 子句正则表达式查询
30、MySQL 数据库事务
31、MySQL ALTER 命令
32、MySQL 索引
33、CREATE TEMPORARY TABLE 创建临时表
34、MySQL DROP TABLE 删除临时表
35、MySQL INSERT INTO SELECT 复制表
36、MySQL 获取服务器元数据
37、MySQL 自增序列 AUTO_INCREMENT
38、MySQL 处理重复数据
39、MySQL 安全及防止 SQL 注入攻击
40、MySQL 导出数据
41、MySQL 导入数据
本文档使用 MrDoc 发布
-
+
首页
29、MySQL REGEXP 子句正则表达式查询
前面章节中我们已经了解到 `MySQL` 可以通过 `LIKE ...%` 子句来进行模糊匹配,但这都只是简单的模糊查询,也是速度最快的模糊查询 除此之外,MySQL 同样也支持其它正则表达式的匹配 MySQL 通过使用 `REGEXP` 操作符来进行正则表达式匹配 如果你了解过其它语言的正则表达式,比如 PHP 或 Perl 等,那么你会对 MySQL 的正则表达式元字符非常熟悉,因为它们都类似 MySQL `REGEXP` 操作符支持以下几种元子符 | 元字符 | 描述 | | --- | --- | ^ |匹配输入字符串的开始位置,如果设置了 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置 $ |匹配输入字符串的结束位置,如果设置了 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置 . |匹配除 “\n” 之外的任何单个字符,如果要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式 […] |字符集合。匹配所包含的任意一个字符,例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’ [^…]| 负值字符集合。匹配未包含的任意字符,例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’ p1\|p2\|p3| 匹配 p1 或 p2 或 p3,例如,’z\|food’ 匹配 “z” 或 “food”。'(z\|f)ood’ 则匹配 “zood” 或 “food” *|匹配前面的子表达式零次或多次,例如,zo 能匹配 “z” 以及 “zoo”。 等价于{0,}。 +|匹配前面的子表达式一次或多次,例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {n}|n 是一个非负整数。匹配确定的 n 次,例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o {n,m}| m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次 在 MySQL 中正则表达式用的不多,但也有那么几个时刻还是很有用处的 下面我们就拿几个伪需求来看看如何使用 **说是伪需求,是因为除了全文检索,其实都可以用 LIKE 语句代替** ### **测试数据** 首先运行下面的 SQL 语句准备测试数据 ```python DROP TABLE IF EXISTS tbl_language; CREATE TABLE IF NOT EXISTS tbl_language( id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(64) NOT NULL, url VARCHAR(128) NOT NULL, founded_at DATE, PRIMARY KEY ( id ) )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO tbl_language VALUES (1,'Python','https://baidu.com','1991-2-20'), (2,'PHP','http://www.php.net','1994-1-1'), (3,'Ruby','https://www.ruby-lang.org/','1996-12-25'), (4,'Kotlin','http://kotlinlang.org/','2016-02-17'); INSERT INTO tbl_language (name,url) VALUES ('Perl','http://www.perl.org/'), ('Scala','http://www.scala-lang.org/'); ``` 使用 `SELECT * FROM tbl_language` 显示数据如下 ```python +----+--------+----------------------------+------------+ | id | name | url | founded_at | +----+--------+----------------------------+------------+ | 1 | Python | https://baidu.com | 1991-02-20 | | 2 | PHP | http://www.php.net | 1994-01-01 | | 3 | Ruby | https://www.ruby-lang.org/ | 1996-12-25 | | 4 | Kotlin | http://kotlinlang.org/ | 2016-02-17 | | 5 | Perl | http://www.perl.org/ | NULL | | 6 | Scala | http://www.scala-lang.org/ | NULL | +----+--------+----------------------------+------------+ ``` ### **范例** 1、 查找 `name` 字段中以 `Py` 为开头的所有 `name`; ```python SELECT name FROM tbl_language WHERE name REGEXP '^Py'; # 运行结果如下 +--------+ | name | +--------+ | Python | +--------+ ``` 2、 查找 `url` 字段中以 `org/` 结尾的所有 `name`; ```python SELECT name FROM tbl_language WHERE url REGEXP 'org/$'; # 运行结果如下 +--------+ | name | +--------+ | Ruby | | Kotlin | | Perl | | Scala | +--------+ ``` 3、 查找 `url` 字段中包含 `lang` 字符串的所有 `name`; ```python SELECT name FROM tbl_language WHERE url REGEXP 'lang'; # 运行结果如下 +--------+ | name | +--------+ | Ruby | | Kotlin | | Scala | +--------+ ``` 4、 来一个复杂的,查找 `url` 字段中包含 `-lan` 且以 `rg/` 结尾的所有 `name`; ```python SELECT name FROM tbl_language WHERE url REGEXP '-lan.*rg/$'; # 运行结果如下 +-------+ | name | +-------+ | Ruby | | Scala | +-------+ ```
李智
2025年3月17日 13:31
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码