mysql 正则表达式 regexp

http://www.zytrax.com/tech/web/regex.htm   Regular Expressions - User Guide

1. 关键字 regexp等于rlike

http://www.sqlines.com/mysql/regexp_rlike MySQL - REGEXP, RLIKE - Guide, Examples and Alternatives

这两条相同:

select * from users where name regexp ''
select * from users where name rlike  ''

2. like 和rlike区别

这两条返回不一样,like匹配整个字串,rlike是匹配部分。

select * from users where name rlike  ''
select * from users where name like  ''

rlike的返回结果是这样

而like的返回结果是空,因为没有人叫‘傻’。

3. 正则表达式

(1). 点号:匹配任意一个字符

(2)| 竖杠:or 两个或多个的选择

select * from users where name rlike  '笨|傻|二'

(3)[] 方框:匹配几个字符之一。其实和竖杠一样的

select * from users where name rlike  '[123]'

其实这条就是竖杠的省略,上下这3条是一样的,方框的作用当表达式复杂才能体现。

select * from users where name rlike  '[1|2|3]'
select * from users where name rlike  '1|2|3'

还可以是范围

select * from users where name rlike  '[1-3]'

(4)\\两个反斜杠:为特殊字符转义(escaping)

查找名字中带“.”的

select * from users where name rlike  '\\.'

(5) 匹配类型

[:alnum:] 任意数字字母,同[a-zA-Z0-9]

[:alpha:] 任意字母,同[a-zA-Z]

[:digit:] 任意数字,同[0-9]

[:print:] 任意可打印字符

[:graph:] 同[:print:],但不包括空格

[:space:] 空格等任意空白字符,同[\\f\\n\\r\\t\\v]

(6) 重复元字符

*     0个或多个匹配(*号前面)

+    1个或多个匹配,等于{1,}

?    0个或1个匹配,等于{0,1}

{n}  指定书目匹配

{n,} 不少于n次的匹配

{n,m} 匹配数目的范围(m不超过255)

例子

select * from users where name rlike 'apples?'  #匹配apple或apples
select * from users where name rlike '[[:digit:]]{4}'  #匹配四个连续的数字

(7) 定位元字符

^    文本的开始(字符在后面)

select * from users where name rlike '^傻'

$  文本的结尾(字符在前面)

select * from users where name rlike 'n$'

 (8)

‘/s’ 匹配间隔符

即匹配空格符、制表符、回车符等表示分隔意义的字符,它等价于[ /t/r/n/f/v]。(注意最前面有个空格)

‘/S’ 匹配非间隔符

即间隔符的补集,等价于[^ /t/r/n/f/v]

4. 测试正则表达式

不需要使用数据表

select 'hello'  rlike '[a-z]'
原文地址:https://www.cnblogs.com/phoenix13suns/p/2831155.html