mysql中正则表达式的使用

1.基本字符的匹配   

select  name from user where name REGEXP 'li';

解释:查询user表中name字段内容中包含“li”的所有行;

如果需要区分大小写,则添加BINARY字段,如下

select  name from user where name REGEXP BINARY  'li';

2.OR匹配(多个条件之间存在 与关系)

select  name from user where name REGEXP 'li|zhao';

解释:查询user表中name字段内容中包含“li”或者“zhao”的所有行;

select  name from user where name REGEXP '[123]li';

解释:查询user表中name字段内容中包含“1li”或者“2li”或者“3li”的所有行;

3.匹配范围

select  name from user where name REGEXP '[1-3]li';

解释:查询user表中name字段内容中包含“1li”或者“2li”或者“3li”的所有行,[1-3]表示匹配1到3;

4.匹配特殊数字符

在正则表达式中,我们都知道特殊字符代表着特殊的含义。例如“.”匹配任意字符,如果使用REGEXP  '.' 来查询数据,则会匹配所有数据;如果想要查询包含“.”的数据,则需要在特殊字符前加"\\",如下:

select  name from user where name REGEXP '\\.';

5.匹配字符集

[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

6.匹配多个实例

select  name from user where name REGEXP ‘\\([0-9] sticks?\\)’;

解释:\\(匹配(,[0-9]匹配任意数字(这个例子中为1和5),sticks?匹配stick和sticks(s后的?使s可选,因为?匹配它前面的任何字符的0次或1次出现),\\)匹配)。没有?,匹配stick和sticks会非常困难。

7.定位符

前面的所有例子都是匹配一个串中任意位置的文本。为了匹配特定位置的文本,需要如下的几种定位符。

^ 文本的开始
$ 文本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾


例如,如果你想找出以一个数(包括以小数点开始的数)开始的所有用户,怎么办?简单搜索[0-9\\.](或[[:digit:]\\.])不行,因为它将在文本内任意位置查找匹配。解决办法是使用^定位符,如下所示:

select  name from user where name REGEXP ‘^[0-9\\.]’;

^匹配串的开始。因此,^[0-9\\.]只在.或任意数字为串中第一个字符时才匹配它们。


参考文献:MySQL必知必会

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值