MySQL之SQLMySQL正则表达式LIKE与REGEXP的区别1. MySQL的正则表达式仅仅使SQL语⾔的⼀个⼦集,可以匹配基本的字符、字符串。
例如:select * from wp_posts where post_name REGEXP 'hello',可以检索出列post_name中所有包含hello的⾏
REGEXP '.og' .是正则表达式中⾥⼀个特殊的字符。它表⽰匹配⼀个字符,因此,dog,hog,mog等等都能匹配。
注意:
关于LIKE和REGEXP的区别:LIKE匹配整个列。如果被匹配的⽂本仅在列值中出现,LIKE并不会到它,相应的⾏也不会返回(当然,使⽤通配符除外)。⽽REGEXP在列值内进⾏匹配,如果被匹配的匹配的⽂本在列值中出现,REGEXP将会到它,相应的⾏将被返回,这时⼀个⾮常重要的差别(当然,如果适应定位符号^和$,可以实现REGEXP匹配整个列⽽不是列的⼦集)。
关于⼤⼩写的区分: MySQL中正则表达式匹配(从版本3.23.4后)不区分⼤⼩写 。如果要区分⼤⼩写,应该使⽤BINARY关键字,如where post_name REGEXP BINARY 'Hello .000'
2.关于OR匹配
为了搜索两个串之⼀,使⽤|, 如,select * from products where pro_id REGEXP '1000|2000' ORDER BY pro_id;
这样就1000和2000都能匹配并返回,当然,使⽤多个|就可以匹配多个串
3.只是匹配⼏个字符[]
例如,这样将要匹配[0123456789]可以匹配0到9,[1-4][4-9]也是合法的范围。此外,范围不⼀定只是数值的,[a-z]匹配任意字母字符
regexp like如:SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;
4.匹配特殊字符使⽤\进⾏转义
\\.能够匹配.
\\f换页
\\n换⾏
\\r回车
\\t制表
\\纵向制表
注意:为了匹配\本⾝,需要使⽤\\\
5.匹配字符类
[:alnum:] 任意字母和数字(通[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表符(同[\\t])
[:digit:] 任意数字(同[0-9])
[:lower:] 任意⼩写字母
[:upper:] 任意⼤写字母
[:space:] 包括空格在内的任意空⽩字符
6.匹配多个实例,关于重复元字符
* 0个或者多个匹配
+ 1个或者多个匹配(等于{1,})
1个或者多个匹配(等于{0,1})
{n} 指定数⽬的匹配
{n,} 不少于指定数⽬的匹配
{n,m} 匹配数⽬的范围(m不超过255)
例⼦: select prod_name from products where prod_name REGEXP '[[:DIGIT:]]{4}' ,如前所述,[:digit:]匹配任意素⼦,因⽽它为数字的⼀个⼏何。{4}确切的要求它前⾯的字符(任意数字)出现3此,所以[[:digit:]]{4}匹配连在⼀起的任意4位数字,当然,上⾯的例⼦也可以这样写REGEXP '[0-9][0-9][0-9] [0-9]'
7.定位符
^ ⽂本的开始
& ⽂本的结尾
[[:<:]] 词的开始
[[:>:]] 词的结尾
通过使⽤这些定位符,能够使REGEXP起类似LIKE的作⽤
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论