在MySQL中,使用REGEXP关键字指定正则表达式的字符匹配模式。
选项 | 描述 | 例子 | 匹配值示例 |
---|---|---|---|
^ | 匹配文本的开始字符 | ^b:匹配以b开头的字符串 | book,big,banana |
$ | 匹配文本的结束字符 | st$:匹配以st结尾的字符串 | test,persist,reist |
. | 匹配任意单个字符 | b.t:匹配b和t之间一个字符的字符串 | bit,bat,bite,but |
* | 匹配零个或多个在它前面的字符 | f*n:匹配n前面0个或多个f字符的字符串 | fn,fan,abcn |
+ | 匹配前面的字符一次或者多次 | ba+:匹配以b开头后面紧跟一个或多个a的字符串 | ba,bay,battle,bare |
<字符串> | 匹配包含指定的字符串文本 | fa:匹配包含“fa”的字符串 | fan,faad,afa |
[字符集合] | 匹配字符集合中的任意一个字符 | '[xz]':匹配x或者z | ddizzy,zebra,extra |
[^] | 匹配不在括号中的任意字符 | '[^abc]':匹配任何不包含a、b、c的字符串 | desk,fox |
{n} | 匹配前面的字符串至少n次 | b{2}:匹配至少有两个b字符的字符串 | bbbb,bb,bbbbbb |
{n,m} | m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 | b{2,4}:匹配最少有两个,最多四个b字符的字符串 | bbb,bb,bbbb |
1.查询以特定字符或字符串开头的记录(^)
例如:查询以“b”开头的记录。
select * from 表名 where name REGEXP '^b';
2.查询以特定字符或字符串结尾的记录($)
例如:查询以“be”开头的记录。
select * from 表名 where name REGEXP 'be$';
3.替代字符串中任意一个字符(.)
例如:查询a与g之间有一个字符的记录。
select * from 表名 where name REGEXP 'a.g';
4.匹配多个字符(*)
*:匹配零个或多个它前面的字符
+:匹配至少一次前面的字符
如:f*n 表示匹配零个或多个 f 字符的字符串
例1:查询以b开头,后面有零个或多个a字母的记录。
select * from 表名 where name REGEXP '^ba*';
例2:查询以b开头,后面有至少一个a字母的记录。
select * from 表名 where name REGEXP '^ba+';
5.匹配指定字符串
例如:查询包含 on 的记录。
select * from 表名 where name REGEXP 'on';
把'on'改为'on|ap'表示,包含on或者ap都行。
6.匹配指定字符串任意一次([字符])
例如:表中字段值包含字母o或t的记录。
select * from 表名 where name REGEXP '[ot]';
[456] = [4-6],表示包含4,5,6中的其中一个。
7.匹配指定字符以外的字符 ([^字符])
[^字符集合]:表示匹配不在集合中的任意字符。
例如:查询字段中包含a~e和1~6以外的字符记录。
select * from 表名 where name REGEXP '[^a-e1-6]';
8.指定字符串连接出现的次数 ({n,m})
例如:查询name字段中至少出现两次“x”的记录。
select * from 表名 where name REGEXP 'x{2,}';
{n,}:表示匹配至少n次前面的字符。
{n,m}:表示匹配前面的字符串不少于n次,不多于m次。