正则表达式
第7章正则表达式
1. 什么是正则表达式
正则表达式就是一种描述字符串结构的语法规则
2. 为什么需要正则表达式?
因为需要对用户提交的信息进行验证,如果不验证的话,有可能用户提交的就是垃圾信息
3. PHP里面的正则表达式函数库
在PHP里面支持2套正则表达式函数库,一套是POSIX,另外一套是PCRE。比起POSIX,现在更多的是使用PCRE这一套正则表达式函数。原因有两个:PCRE函数库的兼容性更好,并且效率高。
我们的正则表达式如果不配合正则表达式函数的话,它就只是一个普通的字符串。所以正则表达式一定要配合正则表达式函数来使用
4. 正则表达式语法
任何一个正则表达式的组成无外乎由4个部分组成 ① 定界符 ② 原子 ③ 元字符 ④ 模式修正符
定界符
我们所写的正则表达式都需要放在定界符里面。一般常见的定界符为两个斜杠//
但是,我们的定界符不仅仅只有// 任何除了数字,字母,反斜杠\ 以外的字符都可以成为正则表达式的定界符
原子
原子是正则表达式里面最基本的组成单位。换句话说,一个正则表达式里面,可以没有元字符,可以没有模式修饰符,但是不能没有原子。
原子大致可以分为5大类
1)普通字符作为原子
所谓普通字符,就是大小写字母,数字等字符
例如:
“/5/” 用于匹配字符串中是否有5这个字符出现
“/php/” 用于匹配字符串中是否有php这个字符串出现
2)特殊字符作为原子
在正则表达式里面,有一些字符是有特殊含义,例如* +?.
如果我们就只想匹配普通的*+?. 的话,必须转义。转义字符是一个反斜杠\
3)非打印字符作为原子
所谓非打印字符,就是字符串中的控制符号,例如:空格,回车,制表符(Tab)
4)使用通用型字符作为原子
所谓通用型字符,就是指一个原子可以匹配多个字符。
\d:匹配任意一个十进制数字0-9
\D:匹配任意一个除了十进制以外的字符
\s:匹配任意一个非打印字符
\S:除了非打印字符以外的字符可以被匹配上
\w:匹配字母数字和下划线
\W:匹配除了数字,字母下划线以外字符
5)自定义原子表作为原子
自定义原子表通过一对[ ]
可以在[]里面加上一个^ 代表不能匹配方括弧里面的字符
还可以在方括弧里面使用” - “ ,代表的是一个范围
元字符
所谓元字符,就是用于构建正则表达式的具有特殊含义的字符。例如:+*?
1)限定符
所谓限定符,就是限定一个原子必须出现多少次:* + ? {n} {n,} {n,m}
*:代表一个原子出现0次或者多次
+:代表一个原子出现1次或者多次
?:代表一个原子要么出现1次,要么出现0次
{n}:前面的原子出现几次
{n,}:前面的原子至少出现n次
{n,m}:前面的原子至少出现n次,最多m次
*:{0,}
+:{1,}
?:{0,1}
2)边界限定符
^:字符串是否以某一个字符串开头
$:字符串是否以某一个字符串结尾
\b和\B
\b :是边界
\B : 不是边界
3)点.
可以匹配任何一个除了换行符以外的字符
4)模式选择符 |
5) 模式单元
所谓模式单元,就是可以使用()将多个原子组合成一个更大的原子
One:将小原子组合成了一个大原子
Two:改变元字符的优先级
Three:开启了独立的模式,会将小括号里面的内容存入到缓冲区里面
被存入到缓冲区里面的内容可以通过\1 \2 \3来进行反向引用
缓冲区是可以被跳过的,通过一个?:来跳过缓冲区
6)元字符的优先级
④ 模式修正符
所谓模式修正符,是对正则表达式功能的一种扩充,增强了正则表达式的处理能力,模式修正符一般是写在定界符外面
i:忽略大小写
M:可以匹配多行,换句话说,可以多行查找
S:主要功能是用来增强点. 的功能
X:可以忽略空格
正则表达式函数
Preg_match():查看一个字符串是否和一个正则表达式匹配,匹配就返回TRUE,否则返回FALSE
Preg_match_all():第一次匹配成功之后也不会像Preg_match()一样停止搜索,而是会继续往后面搜索符合要求的字符串
Preg_grep():接受两个参数,一个是正则表达式,一个是数组,将符合条件的元素提出来返回一个新的数组,返回的新数组里面的元素下标不变
Preg_repalce(正则,替换的字符串,原来的字符串)
除了使用正则的方式,使用字符串替换函数也是可以实现字符串替换的
Str_replace(“要替换的字符串”,“新的字符串”,要操作的字符串,[替换的次数])
使用正则和字符串替换函数都可以实现字符串的替换,但是正则的功能比字符串替换函数要强大一些,但是功能强大的背后,是效率会降低
如果可以是字符串替换函数搞定的事儿,就不要去用正则
字符串分割
Preg_split()
字符串处理
Explode(分隔符,字符串)
Implode():将一个数组组合成一个字符串
Implode(连接符号,数组)