PHP中的正则表达式
正则表达式
一.初识SQL注入
SQL注入:
用户输入的数据被当作SQL代码执行
漏洞的认证:
要求能够获取数据或者表库的结构或者绕过登录
过滤:
属于防止黑客攻击的普遍手段
安全和体验性是站在天平的两侧,越是安全的东西体验性越差,越是体验性好的东西,安全越差。
过滤常用的方法:正则表达式(过滤+快速选择找到数据)
二.什么是正则表达式
正则表达式,又称规则表达式,计算机科学的一个概念。正则表达式通常被用来检索,替代那些符合某个模式(规则)的文本。
正则表达式的特点时:
- 灵活性、逻辑性和功能性非常强
- 可以迅速地用极简单的方法达到字符串的复杂控制
- 对于刚接触的人来说,比较晦涩难懂
正则表达式用途:
判断字符串是否符合某一规则(判断是否符合手机号、邮箱规则)
从一个字符串中找出符合规则的所有子字符串(获取HTML标签名)
三.PHP中正则表达式常用函数
Preg_match_all(正则表达式,匹配字符串,匹配到的东西放入数组):返回匹配到的次数
Preg_replace(正则表达式,匹配成什么,匹配字符串):返回替换后的结果
替换支持数组格式
四.正则表达式语法
常用转义字符:
数字:\d
非数字:\D
空白字符:\s
非空白字符:\S
单词字符(26个英文字母+数字+下划线_):\w
非单词字符:\w
自定义字符集合:
字符集合:[单个字符或字符区间],用于匹配集合内字符
如:
[a-z]表示a-z这26个小写字母
[0-9a-z]表示0-9这10个数字和a-z这26个小写字母
[135a-h]表示包含数字1,3,5和字母a-h这8个字母
注意:两个不同字符段之间请勿用空格隔开
非集:[单个字符或字符区间],用于匹配非集合内字符。
如:
[^0-9]:表示匹配所有非数字字符
[^a-zA-z]:表示匹配所有非字母字符
正则表达式的语法——关键字
()=>和数学一样,表示这个是个整体
^ => 匹配输入字符串的开始位置
/^a/:匹配以a开头的字符串
$ => 匹配输入字符串的结尾位置
/a$/:匹配以a结尾的字符串
. :任意字符(通配)
* :任意次数
+ :匹配1次或多次
第一个字符必须出现1次或以上
$a = '';
//$a = $_GET['a'];
$b = preg_match_all('/a+/', $a,$demo);
var_dump($demo);
$a = '';
//$a = $_GET['a'];
$b = preg_match_all('/a*/', $a,$demo);
var_dump($demo);
\ : 转义字符
| :两项之间的一个选择
网站可以获取访问者的IP:
访问者可以通过一些方法来修改自己的IP
写了IP合法的正则表达式:
/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
限定符:
{n} =>例如0{8} 意思是指只有连起来8个0才会被匹配
{n,} =>例如0{2,} 意思是只要有2个0及其以上的就会被匹配
{n,m} =>例如0{2.4} 意思是最少匹配2个0,最多匹配4个0
注:被匹配时,默认匹配最多的次数
修饰符:
/i =>不区分大小写
/A =>匹配规则必须从头开始匹配
/s =>.将匹配一切字符
/x =>正则表达式中的空白字符会被忽略