正则表达式的基本语法:
界定符
原子
量词
边界控制
模式单元
-------------------------------------------------------------------------------------------------------------------------
界定符
表示一个正则表达式的开始和结束,有三种写法!
$pattern = '/[0-9]/';
#[0-9]#
{[0-9]} 一般不使用这个,会和大括号产生歧义
-------------------------------------------------------------------------------------------------------------------------
正则表达式的工具:regexpal,正则表达式的调试工具
调试工具地址:http://regexpal.isbadguy.com/
-------------------------------------------------------------------------------------------------------------------------
原子
正则表达式中最小的匹配单位,通常是unicode编码表的某一个字符,原子分为两种,可见原子,不可见原子。
不可见原子:
换行符\n 回车\r 制表符\t 空格 等其他不可见符号
-------------------------------------------------------------------------------------------------------------------------
原子的筛选方式
- | 匹配两个或者叫多个分支的选择
- [] 匹配方括号中的任意一个原子
- [^] 匹配除方括号中的原子之外的任意字符
-------------------------------------------------------------------------------------------------------------------------
原子的集合
- . 匹配除换行符之外的任意字符
- \d 匹配任意一个十进制数字,即[0-9]
- \D匹配任意一个非十进制的数字 ,即[^0-9]
- \s 匹配一个不可见原子,即[\f\n\r\t\v]
- \S 匹配一个可见原子,即[^\f\n\r\t\v]
- \w 匹配任意一个数字、字母或下划线,即[0-9a-zA-Z_]
- \W 匹配任意一个非数字、字母或下划线,即[^0-9a-zA-Z_]
-------------------------------------------------------------------------------------------------------------------------
量词
{n} 表示其前面的原子恰好出现n次
{n,} 表示其前面的原子最少出现n次
{n,m} ....n-m次 你懂得
* 匹配0次,1次或者多次的原子即{0,}
+ 匹配一次或者多次之前的原子,即{1,}
? 匹配0次或者1次其之前的原子,即{0,1}
-------------------------------------------------------------------------------------------------------------------------
边界控制与模式单元
^ 匹配字符串开始的位置
$ 匹配字符串结尾的位置
() 匹配其中的整体为一个原子
-------------------------------------------------------------------------------------------------------------------------
修正模式:贪婪模式(默认) 、 懒惰模式(U)加大写的U
$pattern='/xxxxxxxxxxxx/U';
常见的修正模式:
U/u - 懒惰匹配/贪婪匹配
i - 忽略英文字母大小写
x - 忽略空白
s - 让元字符 . 匹配包括换行符在内的所有字符
e -
eg:匹配所有的邮箱
^\w+(\.\w+)*@\w+(\.\w+)+$
eg:匹配所有的URL
^(https?://)?(\w+\.)+(com|cn)$
-------------------------------------------------------------------------------------------------------------------------
preg_match() 和 preg_match_all():
preg_match()只判断是否匹配上,返回值是0或者是1也就是是不是匹配上.
preg_match_all()把所有匹配的结果都放到$arr里,注意这个$arr是&的,所以会直接修改数组。
另外结果的$arr[0]是全部匹配成功的模式字符串,$arr[1]是只包括匹配成功的字符串。
preg_replace() 和 preg_filter():
preg_replace()是str_replace的加强版,它第一个参数传入的值是$pattern也就是正则字符串,所以它很强大。
这两个函数的作用都是匹配并替换内容返回结果,这次不是&了 ,会返回一个数组或字符串“副本”。
注意:两者的区别是,filter 是过滤的意思,也就是说,如果$subject,要匹配的内容传入的是一个数组的话,preg_filter()就会过滤掉没有匹配上的数组单元,如图:
结果:
代码:
preg_grep($pattern,array $input):
相当于阉割版的preg_filter();它只做匹配不做替换,无法匹配的将会被替换.
preg_split($pattern,$subject):
preg_split()是explode()的加强版;
利用$pattern,的值来分割$subject成数组;
preg_quote($str);
正则运算符转义;