目的:在mysql where子句中使用正则表达式来更好的控制数据的过滤。
一.基本字符匹配:
1.检索name包含文本san的所有行:
select * from test where name regexp 'san';
2.知道'.'是正则表达式语言中的一个特殊的字符,他表示匹配任意一个字符,
如:select * from test where name regexp '.0';
3.mysql中的正则表达式匹配不区分大小写,如要区分大小写可使用关键字:binary
如:不区分大小写:select * from test where name regexp 'hh';
区分大小写:select * from test where name regexp binary 'hh';
4.进行or匹配:select * from test where age regexp '2|3|12'; 包含2或包含3或包含12
5.匹配特定字符:可通过指定一组用[和]括起来的字符完成:
select * from test where name regexp '[123]zh'; [123]意思是匹配1或2或3
二.匹配范围:
1.集合可以用来定义要匹配的一个或多个字符:
如:[0123456789] 匹配数字0到9 ; 也可使用-,如:[0-9] 意思一样。
同理[a-z] 匹配任意字母。
select * from test where name regexp '[a-z]d';
三.匹配特殊字符
转义:使用\\进行转义。
如:1)匹配. ,则为\\. 如:select * from test where name regexp '\\.'; name中包含.的记录。
2)匹配| ,用\\| 如:select * from test where name regexp '\\|';
3) 匹配( ,用\\( 如:select * from test where name regexp '\\(';
3)匹配[] ,用\\[ \\] 如:select * from test where name regexp '\\[*\\]'; *表示0个或多个匹配。
4)匹配- ,用\\-
四.匹配字符类
如:
1)检索name字段中包含数字的记录:select * from test where name regexp '[[:digit:]]';
五.匹配多个实例
1)使用*: select * from test where name regexp '\\[*\\]'; *表示0个或多个匹配[。
2)使用?: select * from test where name regexp 'zhs?';
s后的?使s可选,因为?匹配它前面的字符0次或多次。
3)使用+: select * from test where name regexp '\\.+';
4)使用{n,}
六.定位符
为了匹配特定位置的文本,需要使用下表中的定位符:
如:1)检索name以数字开头(文本开头)的记录:
select * from test where name regexp '^[[:digit:]]';
2)检索name以n结尾(文本结尾)的记录:select * from test where name regexp 'n$';
3)检索以2开头的词的记录:
select * from test where name regexp '[[:<:]]2';
4)检索以d结尾的词的记录:
select * from test where name regexp 'd[[:>:]]';