mysql正则REGEXP学习练习笔记
发布:smiling 来源: PHP粉丝网 添加日期:2014-09-27 22:22:16 浏览: 评论:0
REGEXP在mysql是用来执行正则表达式的一个函数,像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使用like即可,但复杂的还是需要使用regexp了,下面我们来看看.
MySql用户手册建议,在构造简单查询时,仍使用通配符.如:Select [*|fieldname list] From [tablename] where [fieldname] like ["%someletter"|"%someletter%","_","?someletter"];
但在一些特殊查询中,不用正则表达式是不行的,MYSQL提供的正则表达式WHERE谓词有三个,分别是:REGEXP, RLIKE, NOT RLIKE
用这三个替换原有的LIKE谓词,后面即可以跟正则表达式,例如要查询字段中含有“_”的数据,则要用以下查询语句:
SELECT * FROM TABLENAME WHERE FIELDNAME RLIKE '.[_].';
扩展正则表达式的一些字符是:
· ‘.’匹配任何单个的字符.
· 字符类“[...]”匹配在方括号内的任何字符,例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”,“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字.
· “ * ”匹配零个或多个在它前面的字符,例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符.
如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”.
为了找出以“b”开头的名字,使用“^”匹配名字的开始,使用正则:
- SELECT * FROM pet WHERE name REGEXP BINARY ‘^b’;
- SELECT * FROM pet WHERE name REGEXP ‘fy$’;
- SELECT * FROM pet WHERE name REGEXP ‘w’;
- SELECT * FROM pet WHERE name REGEXP ‘^…..$’;
- SELECT * FROM pet WHERE name REGEXP ‘^.{5}$’;
今天在应用中遇到了这样的一个问题,有一个字段 t1,其中的值类似于:1,1,1,2,3,3,4,4,5,5,2,4,3,2,1,2.
需要从里面搜索出比如说,第一个逗号前的数字范围为3-5之间,第三个逗号前的数字的范围为3-5之间,第10个逗号前的数字范围为3-5之间,其余的都为1-5之间.
则sql语句可以这么写:SELECT * FROM tb WHERE t1 REGEXP '^[3-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5],[3-5],[1-5],[1-5],[1-5],[1-5],[1-5],[1-5]%';
1. 使用LIKE和NOT LIKE比较操作符(注意不能使用=或!=);
2. 模式默认是忽略大小写的;
3. 允许使用”_”匹配任何单个字符,”%”匹配任意数目字符(包括零字符);
附一些mysql正则规则
^ 匹配字符串的开始部分
$ 匹配字符串的结束部分
. 匹配任何字符(包括回车和新行)
a* 匹配0或多个a字符的任何序列
a+ 匹配1个或多个a字符的任何序列
a? 匹配0个或1个a字符
de|abc 匹配序列de或abc
(abc)* 匹配序列adc的0个或者多个实例
{n}、{m,n} {n}或{m,n}符号提供了编写正则表达式的更通用方式,能够匹配模式的很多前述原子(或“部分”),m和n均为整数.
a* 可被写为a{0,}
a+ 可被写为a{1,}
a? 可被写为a{0,1}
[a-dX] 匹配任何是a,b,c,d或者X的字符,两个其他字符之间的’-'字符构成一个范围
[^a-dX] 匹配任何不是a,b,c,d或者X的字符,前面的字符’^'是否定的意思.
[.characters.] 在括号表达式中(使用[和]),匹配用于校对元素的字符序列,字符为单个字符或新行等字符名.
- mysql> SELECT ‘~’ REGEXP ‘[[.~.]]’; -> 1
- mysql> SELECT ‘~’ REGEXP ‘[[.tilde.]]’; -> 1
- [=character_class=]
在括号表达式中(使用[和]),[=character_class=]表示等同类,它与具有相同校对值的所有字符匹配,包括它本身.
[[=a=]] 等同于[a(+)],[a+],[a{1,}]
[:character_class:],在括号表达式中(使用[和]),[:character_class:]表示与术语类的所有字符匹配的字符类.
标准的类名称是:
- alnum 文字数字字符
- alpha 文字字符
- blank 空白字符
- cntrl 控制字符
- digit 数字字符
- graph 图形字符
- lower 小写文字字符
- print 图形或空格字符
- punct 标点字符
- space 空格、制表符、新行、和回车
- upper 大写文字字符
- xdigit 十六进制数字字符 //phpfensi.com
[[:<:]], [[:>:]]:这些标记表示word边界,它们分别与word的开始和结束匹配,word是一系列字字符,其前面和后面均没有字字符,字符是alnum类中的字母数字字符或下划线(_).
- mysql> select ‘fang shan zi’ regexp ‘[[:<:]]shan[[:>:]]’; -> 1
- mysql> select ‘fang shan zi’ regexp ‘[[:<:]]fang[[:>:]]’; -> 1
- mysql> select ‘fang shans zi’ regexp ‘[[:<:]]shan[[:>:]]’; -> 0
正则表达式使用特殊字符,应在其前面加上2个反斜杠’'字符:
- mysql> SELECT ’1+2′ REGEXP ’1+2′; -> 0
- mysql> SELECT ’1+2′ REGEXP ’1+2′; -> 0
- mysql> SELECT ’1+2′ REGEXP ’1\+2′; -> 1
Tags: REGEXP mysql正则
- 上一篇:常见的导致mysql中文乱码问题
- 下一篇:mysql锁表机制分析与锁表问题
相关文章
- ·mysql中replace、regexp正则表达式替换用法(2014-09-24)
- ·MySQL实现模糊查询(REGEXP,LIKE)有2种方式(2014-09-28)
- ·MySQL中REGEXP正则表达式使用详解(2014-09-29)
- ·mysql find_in_set或REGEXP查询字段中指定字符内容(2014-09-29)
- ·mysql中模糊匹配查询与正则匹配(2014-10-05)
- ·MySql正则 查找筛选字段为中文的记录(2014-10-10)
- ·mysql update正则替换sql语句(2014-10-10)
- ·mysql sql中正则表达式用法(2014-10-13)
- ·mysql正则表达式字符替换语句(2014-10-14)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)