MySQL正则模式
MySQL除了通过 LIKE ...% 来进行模糊匹配还可以借助正则来匹配。
MySQL中使用 REGEXP
操作符来进行正则表达式匹配。
下表中的正则模式可应用于 REGEXP 操作符中。
模式 | 描述 |
---|---|
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。 |
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 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"。+ 等价于 {1,}。 |
{n} | n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。 |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 |
正则匹配示例
数据表示例
+----+--------------------+--------+---------------------+--------+
| id | title | author | pub_date | a_type |
+----+--------------------+--------+---------------------+--------+
| 1 | hadoop简介 | 大猿 | 2003-01-05 11:23:00 | NULL |
| 2 | python元类 | 小猿 | 2003-01-11 13:00:01 | NULL |
| 3 | HTML基础 | 猿大头 | 2004-03-09 12:00:00 | NULL |
| 4 | Javascript | 猿媛 | 2005-11-03 17:34:12 | NULL |
| 5 | ETL快速入门 | 猿媛 | 2005-11-07 18:40:00 | NULL |
| 6 | 异步编程 | 大猿 | 2005-11-07 18:45:00 | NULL |
| 7 | 快速搭建自己的web | 大猿 | 2021-01-03 00:00:00 | NULL |
| 8 | 一分钟搞定人脸识别 | 小猿 | 2021-01-03 00:00:00 | NULL |
| 10 | 快速搭建自己的web | 大猿 | 2022-04-25 18:35:49 | NULL |
+----+--------------------+--------+---------------------+--------+
查找title字段中以字母为开头的所有数据
mysql> SELECT * FROM articles WHERE title REGEXP '^[a-zA-Z]';
+----+-------------+--------+---------------------+--------+
| id | title | author | pub_date | a_type |
+----+-------------+--------+---------------------+--------+
| 1 | hadoop简介 | 大猿 | 2003-01-05 11:23:00 | NULL |
| 2 | python元类 | 小猿 | 2003-01-11 13:00:01 | NULL |
| 3 | HTML基础 | 猿大头 | 2004-03-09 12:00:00 | NULL |
| 4 | Javascript | 猿媛 | 2005-11-03 17:34:12 | NULL |
| 5 | ETL快速入门 | 猿媛 | 2005-11-07 18:40:00 | NULL |
+----+-------------+--------+---------------------+--------+
查找title字段中以字母为结尾的所有数据
mysql> SELECT * FROM articles WHERE title REGEXP '[a-zA-Z]$';
+----+-------------------+--------+---------------------+--------+
| id | title | author | pub_date | a_type |
+----+-------------------+--------+---------------------+--------+
| 4 | Javascript | 猿媛 | 2005-11-03 17:34:12 | NULL |
| 7 | 快速搭建自己的web | 大猿 | 2021-01-03 00:00:00 | NULL |
| 10 | 快速搭建自己的web | 大猿 | 2022-04-25 18:35:49 | NULL |
+----+-------------------+--------+---------------------+--------+
查找title字段中包含'Python'或者'Java'字符串的所有数据:
mysql> SELECT * FROM articles WHERE title REGEXP 'Python|Java';
+----+------------+--------+---------------------+--------+
| id | title | author | pub_date | a_type |
+----+------------+--------+---------------------+--------+
| 2 | python元类 | 小猿 | 2003-01-11 13:00:01 | NULL |
| 4 | Javascript | 猿媛 | 2005-11-03 17:34:12 | NULL |
+----+------------+--------+---------------------+--------+
讨论区