mysql正则表达式的简单用法:
a) select sno from student where sname REGEXP 'aa';这句语法很像like,regexp后所跟的东西作为正则表达式处理:查询包含 aa的所有行;
b) where sname regexp '.000';这里使用了正则表达式中的一个字符 . ,它表示匹配任意一个字符,如1000,2000,3000等;
c) mysql中的正则表达式匹配不区分大小写,为区分大小写,可使用BINARY关键字,如where sname regexp BINARY 'AbC';
d) 使用 | ,这是正则表达式的or操作,如select ... regexp '1000 | 2000 | 3000';
e) 使用 [] ,如select ... regexp '[123]ton';[123]表示匹配1或2或3,因此,可以返回1ton或2ton或 3ton;实际上[]是or的另一种形式,[123]ton其实是[1|2|3|]ton的缩写,两者意思完全相同;
f) [^123] 表示匹配除这些字符外的其他字符;
g) 匹配范围可用[0-9],如select ... regexp '[1-4]';也可以是[a-z];
h) 匹配特殊字符(即转义):可以用 \\ 这个符号,可以用 \\ .表示查找 . ,\\- 表示查找 - ;需要转义 的包括 . | [] 等;
i) \\ 也可以用来引用元字符(具有特殊含义的字符),如: \\f换页 \\n换行 \\r回车 \\t 制表 \\v 纵向制表 \\\反斜杠;
j) 匹配多个实例:
如:select ... regexp '\\([0-9]sticks?\\)';可返回的结果有:mm(1stick)或mm(5sticks),\\)表示匹配),sticks?匹配stick和sticks(?是使s可选,因为?匹配它前面的任何字符的0次或1次出现);
再如:select ...regexp '[[:digit:]]{4}',表示匹配连在一起的4位数字,也可以是'[0-9][0-9] [0-9][0-9]';
k) 需注意的是:编写某个特殊的表达式几乎总是有不止一种方 法;
l) 匹配特定位置的字符,如:
如要找一个数字或小数点开头的,可以:
select ... regexp '^[0-9\\.]';
m) regexp检查总是返回0(没有匹配)或1(匹配),测试如下:
select 'hello' regexp '[0-9]';
将返回0,因为没有匹配;
n) 利用^和$,可以使regexp的作用和like一样,通过用^开始 每个表达式,用$来结束每个表达式;