Mysql与正则表达式笔记-松勤

正则表达式是用来匹配文本的特殊的字符集合,将一个正则表达式与文本串进行比较,Mysql中用where子句提供支持,正则表达式关键字:regexp

1、使用‘|’匹配两个串中的一个

2、使用‘[]’匹配几个字符中的一个

3、使用‘[^]’不匹配几个字符串中的任意一个,表示否定

4、对于特殊字符的匹配
需要在待匹配的特殊字符前面加上‘\’进行转义。

5、Mysql支持的正则表达式字符集

正则表达式是用来匹配文本的特殊的字符集合,如果想从一个文本文件中提取电话号码,可以用正则表达式完成

作用:匹配文本,将一个正则表达式与一个文本串进行比较
格式:where子句中使用regexp 关键字,后面接正则表达式字符

与Like的区别:
where可以使用like (not like)和regexp (not regexp)来匹配特定的内容
1、like匹配整列数据
2、regexp 可以匹配列中任意位置的文本,更灵活更强大

完全匹配
select prod_name from products where prod_name regexp ‘1000’;

等同于like语句
select prod_name from products where prod_name like ‘%1000%’;

| 两个串中间的一个,效果等同于or or是完全匹配,不能模糊匹配

或者,不能放在like后面,放在regexp后面
select prod_name from products where prod_name regexp ‘1000|2000’;

[] 匹配同个字符中的一个,与in相似,in是完全匹配

匹配1或2或3
select prod_name from products where prod_name regexp ‘[123] ton’;
匹配包含12 ton数据
select prod_name from products where prod_name regexp ‘[123][123] ton’;

[^ ] 不匹配几个字符中的任意一个

不匹配括号中任意一个字符的结果,除了123,其它都会被查询出来
select prod_name from products where prod_name regexp ‘[^123] ton’;

[1-9]匹配一个范围1到9的数字
[a-z]包含a到z的任意一个字符

匹配1至5的任意数字 1 ton ,2 ton,3 ton,4 ton,5 ton
select prod_name from products where prod_name regexp ‘[1-5] ton’;

\对于特殊字符的匹配需要转义

匹配点.
select vend_name from vendors where vend_name regexp ‘\.’;

正则表达式字符集

[:alnum:]任意字母和数字[a-zA-Z0-9]
[:alpha:]任意字符[a-zA-Z]
[:upper:]任意大写字母[A-Z]
[:lower:]任意小写字母[a-z]
[:digit:]任意数字[0-9]
[:xdigit]任意十六进制字[a-fA-F0-9]
[:blank:]空格和制表[\t]
[:space:]包括空格在内的任意空白字符[\f\n\r\t\v]
[cntrl:] ascii控制字符0-37和127
[:graph:]与[:print:]相同,不包括空格
[:print:]任意可打印字符
[:punct:]排除[:alnum]和[:cntrl:]的任意字符

  • 0或多个匹配 与Like后面的%相似
  • 1个或多个匹配{1,} 针对这个位置前面的字符匹配
    ? 0个或1个匹配 {0,1}
    n 指定数目的匹配
    {n,} 不少于指定数目的匹配 出现n次以上
    {n,m} 匹配数目的范围,m不超过255 出现n次以上少于m次
    ^ 文本的开始
    $ 文本的结尾
    [[:<:]] 单词的开始[[:<:]] a app
    [[:>:]] 单词的结尾

匹配连在一起的4位数字
select prod_name from products where prod_name regexp ‘[[:digit:]]{4}’;

练习

查找prod_id包含anv的数据
select * from products where prod_id regexp ‘anv’;

如果需要区分大小写,binary关键字
select * from products where binary prod_id regexp ‘ANV’;

查找prod_id包含anv或者包含f的数据
select * from products where prod_id regexp ‘anv|f’;

包含3,c,e的数据
select * from products where prod_id regexp ‘[3ce]’;

select * from products where prod_id regexp ‘[^3ce]’; 没有定位哪一个字符

查找f开头不包含3,c,e的数据
select * from products where prod_id regexp ‘f[^3ce]’;

查找prod_desc含有.开头的数据
select * from products where prod_desc regexp ‘^\.’;

前面是任意字符与数字,点后面有9或没有都可以被查找出来
select * from products where prod_price regexp ‘[[:alnum:]]\.9*’;

9后面出现一个或多个都能被查出来
select * from products where prod_price regexp ‘[[:alnum:]]\.9+’;

点后面出0个或1个都可以被查询出来
select * from products where prod_price regexp ‘[[:alnum:]]\.9?’;

?是针对.的限制,有没有.都可以被查出来
select * from products where prod_price regexp ‘[[:alnum:]]\.?’;

查找以k结尾的数据
select * from products where prod_price regexp ‘k$’;

查找d开头的数据
select * from products where prod_price regexp ‘^d’;

查找单个d的数据
select * from products where prod_price regexp ‘^d$’;

查找以d开头以d结尾的数据
select * from products where prod_price regexp ‘^d.*d$’;

查找以p单词开头的数据
select * from products where prod_desc regexp '[[:<:]]'p;

查找以f结尾单词的数据
select * from products where prod_desc regexp ‘f[[>:]]’;

更多学习资料,可以私信我获取

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读