MySQL正则表达式 regexp
基本用法
‘^’ / '$'从开头/结尾匹配符号
select code from bk_material where code regexp '^W$'; 检索以W开头以W结尾的数据,那么就是只含W的数据。
'.'匹配除\n以外的任一个字符
select code from bk_material where code regexp '^.W';匹配第二个字符是W的数据
'[…]'匹配括号里面包含的任一个字符的数据
select code from bk_material where code regexp '^[a-zA-Z]';匹配第一个字符是英文的数据
‘[^…]’ 匹配不包含括号里字符或模式的数据
select code from bk_material where code regexp '^.W';'匹配首字母不为W的字符串
'p1|p2|p3’匹配p1或者p2或者p3模式
select Name from bk_material where name regexp '^a|w|p';'匹配首字母是a,w,p的字符串
'{n}'连续匹配次数,{n,m}连续最少匹配n次,连续最多匹配m次
select 'boboeobo' regexp '(bo){2}';'连续两次匹配bo
select 'boboeobo' regexp '(bo){3,}';'连续最少匹配3次bo。
‘?’ 等价于 ‘?[0,1]’
‘*’ 等价于 ‘?[0,]’
‘+’ 等价于 ‘?[1,]’
[:class:]表
alnum:文字数字字符
alpha:文字字符
blank:空白字符
cntrl:控制字符
digit:数字字符
graph:图形字符
lower:小写文字字符
print:图形或空格字符
punct:标点字符
space:空格、制表符、新行、和回车
upper:大写文字字符
xdigit:十六进制数字字符
注意点:主要是中文,如果能确定字符串是中文,能不用就不用吧
1.特殊字符转义需要两个’\’,Mysql要一个,正则表达式要一个;
2.中文字符字符范围:[\u4e00-\u9fa5];
3.中文字符在Mysql语句中占3个字符:select Name from bk_material where name regexp '^...公';如果全是中文,代表第二个中文是公的字符串;
4.中文由于模糊查询大小写转换出现问题:select Name from bk_material where name regexp '^办|木|公';塑料都出来了。。。