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的作用






-------------------------------------------------------------------------------




like模式

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

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

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

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

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

查出所有包含“华”字的人名

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

 

正则模式 

^,匹配字符串开始位置,还是上面的例子,查询所有姓王的人名

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

 

$,匹配字符串结束位置,如查询所有姓名末尾是“明”的人名

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模式也不认识_和%






  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MySQL正则表达式是一种用于匹配和操作字符串的强大工具。它可以在MySQL数据库中进行模式匹配、搜索、替换等操作。在MySQL中,我们可以使用正则表达式来查找符合特定模式的数据。 以下是一些常用的MySQL正则表达式操作: 1. REGEXP:该操作符可用于在查询中使用正则表达式进行模式匹配。例如,可以使用`SELECT * FROM table_name WHERE column_name REGEXP 'pattern'`来查找符合特定模式的数据。 2. REGEXP_LIKE:该函数用于检查一个字符串是否与给定的正则表达式相匹配。例如,可以使用`SELECT * FROM table_name WHERE REGEXP_LIKE(column_name, 'pattern')`来查找符合特定模式的数据。 3. REGEXP_REPLACE:该函数用于将匹配到的字符串替换为新的字符串。例如,可以使用`SELECT REGEXP_REPLACE(column_name, 'pattern', 'replacement') FROM table_name`来替换符合特定模式的字符串。 4. REGEXP_INSTR:该函数用于返回一个字符串中第一个匹配项的位置。例如,可以使用`SELECT REGEXP_INSTR(column_name, 'pattern') FROM table_name`来获取符合特定模式的字符串的位置。 5. REGEXP_SUBSTR:该函数用于提取符合特定模式的子字符串。例如,可以使用`SELECT REGEXP_SUBSTR(column_name, 'pattern') FROM table_name`来提取符合特定模式的子字符串。 请注意,MySQL正则表达式的语法可以使用标准的正则表达式语法,但也有一些特定的规则和限制。在使用正则表达式时,建议参考MySQL官方文档以了解更多详细信息和示例。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值