目录
4、匹配任何单一字符[ ](等同于[ * | * | * ])
作用
是用来进行文本搜索匹配的特殊的字符集合。注意mysql里面的正则表达式的匹配是不区分大小写的,也就是说大写小写都匹配。记住,如果不指定位置的话,我们搜索的是包含正则表达式的,而不是完全匹配的。
使用
1、REGEXP
和like的使用方法类似,当写了一个REGEXP之后,就表明后面跟的是一个正则表达式。
select name from peoducts where name REGEXP '1000' ;
这样只要是字符串里面出现了1000的都可以匹配。比如:
Jet 1000
2、. (点)表示可以匹配任意一个字符
select name from peoducts where name REGEXP '.000' ;
这样就可以匹配1000,2000,3000等等类似的。
3、两个串之一的匹配使用 |(类似于OR)
select name from peoducts where name REGEXP '1000|2000' ;
也就是只要字符串包含了1000或者2000都可以匹配到。
也可以使用|联合多个表达式:1000|2000|3000这样。
4、匹配任何单一字符[ ](等同于[ * | * | * ])
select name from peoducts where name REGEXP '[123] Ton' ;
那么这个[123]就表示匹配1或2或3,因此1 ton或者2 ton都匹配并返回。也就是说[123]实际上等同于[1|2|3]。
5、范围匹配
为了简化[0123456789]这样的范围匹配,可以用一个"—"来定义一个范围。比如:[0-9]。又或者[a-z]来匹配任意字母。但是注意,匹配是不区分大小写的。
select name from peoducts where name REGEXP '[1-5] Ton' ;
因此可以匹配到:
.5 Ton
1 Ton
2 ton
等等这样的。
6、匹配特殊字符(转义)
比如有时候需要匹配“.”这个字符怎么办?肯定不能直接写“.”,因为这个表示匹配任意一个字符。
为了匹配一个特殊字符,必须以\\为前导加上这个字符才行。比如\\-表示查找-,\\?表示查找?。
因此查找“.”就需要写成:
select name from peoducts where name REGEXP '\\.' ;
最后会搜到包含.的所有字符串。
因此,如果为了匹配“\”,我们就要写成“\\\”。
此外,\\也会用来表示特殊意义的字符:
7、匹配多次出现
前面的正则表达式都是匹配单次出现的情况,如果要匹配的表达式多次出现的情况,就需要使用“重复元字符”
比如:
select name from peoducts where name REGEXP '\\([0-9] sticks?\\)';
后面的正则表达式意思是:首先匹配一个“(”,然后是一个0~9的数字,然后是stick,然后s前面有一个?,这个“s?”表示s出现0次或者1次,即stick或者sticks都匹配,最后是匹配一个“)”。
因此匹配结果为:
tnt (1 sticks)
tnt (2 stick)
这样的。
再比如:
select name from peoducts where name REGEXP ' [0-9]{4} ';
这里的{4}表示匹配他前面的字符出现4次,也就是匹配任意一个四位数。
8、定位符
前面的匹配都是匹配字符串里面的任意位置,为了匹配特定位置的文本,需要使用定位符:
比如:
select name from peoducts where name REGEXP ' ^[0-9\\.] ';
这就表示要匹配开头为0-9的或者为一个.的。比如:
.5 ton
1 ton
2 ton
等等。
参考文献:《MySQL必知必会》