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 '^王';
查询结果如下图:
使用正则表达式查询 name
字段中包含小
字的数据:
sql
SELECT \* FROM student WHERE name REGEXP '小';
查询结果如下图:
以 teacher
表为例,使用正则表达式匹配符合邮箱
格式的数据:
sql
SELECT \* FROM teacher WHERE email REGEXP '^[a-zA-Z0-9\_-]+@[a-zA-Z0-9\_-]+(\.[a-zA-Z0-9\_-]+)+$';
查询结果如下图:
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$