Skip to content

MySQL 正则表达式

正则表达式中的元字符

元字符描述
\将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配换行符。序列“\”匹配“\”。
^匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
*匹配前面的子表达式任意次。例如,zo*能匹配“z”,“zo”,“zoo”。等价于{0,}
+匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”,“zoo”,但不能匹配“z”。
?匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。等价于{0,1}
{n}匹配确定的n次。例如,“o{2}”能匹配“food”中的两个o。
{n,}至少匹配n次。例如,“o{2,}”能匹配“foooood”中的所有o。
{n,m}最少匹配n次且最多匹配m次。例如,“o{1,3}”匹配三个o为一组。
?匹配模式是非贪婪的,尽可能少地匹配字符串。
.匹配除“\n”和“\r”之外的任何单个字符。
(pattern)匹配pattern并获取这一匹配。
(?:pattern)非获取匹配,匹配pattern但不获取匹配结果。
(?=pattern)正向肯定预查,在匹配pattern的字符串开始处匹配查找字符串。
(?!pattern)正向否定预查,在不匹配pattern的字符串开始处匹配查找字符串。
(?<=pattern)反向肯定预查,与正向肯定预查类似,只是方向相反。
(?<!pattern)反向否定预查,与正向否定预查类似,只是方向相反。
[xyz]字符集合,匹配所包含的任意一个字符。
[^xyz]负值字符集合,匹配未包含的任意字符。
[a-z]字符范围,匹配指定范围内的任意字符。
[^a-z]负值字符范围,匹配任何不在指定范围内的任意字符。
\b匹配一个单词的边界。
\B匹配非单词边界。
\cx匹配由x指明的控制字符。
\d匹配一个数字字符,等价于[0-9]
\D匹配一个非数字字符,等价于[^0-9]
\f匹配一个换页符,等价于\x0c\cL
\n匹配一个换行符,等价于\x0a\cJ
\r匹配一个回车符,等价于\x0d\cM
\s匹配任何不可见字符,包括空格、制表符、换页符等等。
\S匹配任何可见字符,等价于[^ \f\n\r\t\v]
\t匹配一个制表符,等价于\x09\cI
\v匹配一个垂直制表符,等价于\x0b\cK
\w匹配包括下划线的任何单词字符。类似于[A-Za-z0-9_]
\W匹配任何非单词字符,等价于[^A-Za-z0-9_]
\xn匹配n,其中n为十六进制转义值。
\num匹配num,是一个正整数,指代所获取的匹配的引用。
\n标识一个八进制转义值或一个向后引用。
\un匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。
\p{P}匹配Unicode属性中的标点字符。
\< \>匹配词(word)的开始和结束。
( )将(和)之间的表达式定义为“组”,并且将匹配结果保存到临时区域。

使用REGEXP正则表达式查询

student 表为例,使用正则表达式查询出姓的教师:

sql
SELECT \* FROM student WHERE name REGEXP '^王';

查询结果如下图: 2025-05-24-21-59-29.png

使用正则表达式查询 name 字段中包含字的数据:

sql
SELECT \* FROM student  WHERE name REGEXP '小';

查询结果如下图: 2025-05-24-22-00-03.png

teacher 表为例,使用正则表达式匹配符合邮箱格式的数据:

sql
SELECT \* FROM teacher  WHERE email REGEXP '^[a-zA-Z0-9\_-]+@[a-zA-Z0-9\_-]+(\.[a-zA-Z0-9\_-]+)+$';

查询结果如下图: 2025-05-24-22-00-44.png

sql
//11手机号正则表达式
^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$

//域名网址正则表达式
^(?=^.{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+)*$

//日期+时间正则表达式
^[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$
最近更新