【MySQL】正则表达式的使用

目录

作用

使用

1、REGEXP

2、.  (点)表示可以匹配任意一个字符 

3、两个串之一的匹配使用 |(类似于OR)

4、匹配任何单一字符[  ](等同于[ * | * | * ])

5、范围匹配

6、匹配特殊字符(转义)

 7、匹配多次出现

8、定位符


作用

是用来进行文本搜索匹配的特殊的字符集合。注意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必知必会》

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值