MySQL 中使用正则表达式
前面小节介绍过使用 LIKE 模糊包含的字段的结果集,本小节介绍正则表达式相关的基础知识,学习之后,可以使用正则表达式来更加符合需求的字段。
1. 正则表达式中的元字符
2. 使用REGEXP正则表达式
以 student 表为例,使用正则表达式出姓王的教师:
SELECT * FROM student WHERE name REGEXP '^王';
结果如下图:
使用正则表达式 name 字段中包含小字的数据:
SELECT * FROM student WHERE name REGEXP '小';
结果如下图:
以 teacher 表为例,使用正则表达式匹配符合邮箱格式的数据:
SELECT * FROM teacher WHERE email REGEXP '^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$';
结果如下图:
Tips:如上图所示, 其中 ^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$
为符合邮箱匹配规则的正则表达式,结果 email 的值如果不满足此正则表达式,则该条数据不会被出来。
3. 小结
本小节介绍了如何使用 REGEXP 正则表达式匹配符合正则表达式的数据,列举了正则表达式的元字符,介绍了在 中正则表达式的基本匹配,需要注意的是正则表达式更多具体知识这里不做详细的介绍,这里主要介绍如何在 语句中如何对字段进行已有的正则表达式正则匹配,下表列举了几个正则表达式:
(1) 11手机号正则表达式:
^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$
(2) 域名网址正则表达式
^(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+(:\d+)*(\/\w+\.\w+)*$
(3) 日期+时间正则表达式
^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$
更多的正则表达式可根据自己的需求来改写。