mysql中正则和like区别_MySQL的正则表达式?LIKE和REGEXP的区别?

MySQL的正则表达式?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]匹配任意字母字符

如: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的做用javascript

-------------------------------------------------------------------------------java

like模式git

like意思是长得像,有两个模式:_和%正则表达式

_表示单个字符,一般用来查询定长的数据,如查出全部姓王的三个字的人名,假设姓名列名为name,注意“王”后面有两个_sql

select name from 表名 where name like '王__';

%表示0个或多个任意字符,如查出全部姓王的人名post

select name from 表名 where name like '王%';

查出全部包含“华”字的人名spa

select name from 表名 where name like '%华%';

正则模式code

^,匹配字符串开始位置,仍是上面的例子,查询全部姓王的人名regexp

select name from 表名 where name regexp '^王';

$,匹配字符串结束位置,如查询全部姓名末尾是“明”的人名javascript正则

select name from 表名 where name regexp '明$';

.,匹配除\n以外的任意单个字符,相似于_,就不写sql语句了

[……],匹配[]中包含的任何一个字符,abcdef……xyz能够简写为[a-z],0123456789简写成[0-9],如查询出w/z/s开头的的人名

select name from 表名 where name regexp '^[wzs]';

[^……],匹配不包含在[]的字符,如查询出除了w/z/s开头以外的人名

select name from 表名 where name regexp '^[^wzs]';

a|b|c,匹配a或b或c,如将绩效为A-或A或A+的员工查出来,假设绩效列名performance

select performance from 表名 where performance regexp 'A-|A|A+';

*,重复0次或屡次,熟悉javascript正则的同窗都知道

'str*'能够匹配st/str/strr/strrr……

?,重复0次或1次

'str?'能够匹配st/str

+,重复1次或屡次

'str+'能够匹配str/strr/strrr/strrrr……

相比javascript里面的正则而言,这里的正则是简化版的,没有惰性匹配/贪婪匹配,[]内不支持\w\s\d这种语法,也不支持中文,相对简单。

须要注意的一点是:这两种模式不要混着用,like模式是不支持正则表达式的,REGEXP模式也不认识_和%

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值