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]'