php 正则表达式
php 正则表达式
1界定符
标识一个正则表达式的开始和结束,用‘/‘ 如:‘/[0-9]/‘
2原子:
可见原子:Unicode编码表中可用键盘输出后肉眼可见的字符,例如:标点 ; . / ? 或者英文字母,汉字等等可见字符 不可见原子:Unicode编码表中可用键盘输出后肉眼不可见的字符,例如:换行符 \n,Tab制表符\t, 空格等等, 一般只用这三个(换行符一般和其他字符一起匹配,因为只有换行符是匹配不到的) 小提示:匹配运算符前面需要加‘\‘ 例如:‘+‘ 号,匹配的话需要写出 ‘\+‘
元字符
原子的筛选方式: | 匹配两个或者多个分支选择 [] 匹配方括号中的任意一个原子 [^] 匹配除方括号中的原子之外的任意字符; 例子:Duang|duang 或者 [Dd]uang 都可以匹配到Duang和duang 区间写法:[a-z]匹配a到z的字符, [0-9]匹配0到9的字符。也可以[a-z0-9] . 匹配除换行符之外的任意字符 \d 匹配任意一个十进制数字,即{0-9] \D 匹配任意一个非十进制数字[^0-9] 相当于[^\d] \s 匹配一个不可见的原子,即[\f\n\r\t\v] \S 匹配一个可见的原子,即[^\f\n\r\t\v],相当于[^\s]z \w 匹配任意一个数字、字母或下划线,即[0-9a-zA-Z_] \W 匹配任意一个非数字、字母或下划线,[^0-9a-zA-Z_],相当于[^\w]
量词
{n} 表示其前面的原子刚好出现了n次。 [n] 表示其前面的原子最少出现n次 {n,m} 最少出现n次,最多出现m次 * 匹配0次、一次或者多次,即{0,} + 匹配一次或多次,即{1,} ? 匹配0或1次,即{0,1}
边界控制
^ 匹配字符串开始的位置 $ 匹配字符串结尾的位置 例:^John 可以匹配到:John 但是匹配不到:123John,因为规定了字符串以John开头
模式单元
{} 匹配其中的整体为一个原子
修正模式
常见的修正模式: U 懒惰匹配 i 忽略英文字母的大小写 x 忽略正则表达式的空白符 s 让元字符‘.‘ 匹配包括换行符在内的所有字符
常用函数
preg_match
执行匹配正则表达式
preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int pattern: 要搜索的模式,字符串类型。 subject:输入字符串。 match: 如果提供了参数matches,它将被填充为搜索结果,数据结构为一维数组。 flags: 可以设置为PREG_OFFSET_CAPTURE,使用搜索结果的第0个元素为匹配的字符串,第1个元素为对应的偏移量(位置) offset: 搜索从目标字符串的起始位置开始匹配。 返回值:匹配次数 类似函数preg_match_all,参数与preg_match一致 区别: preg_match:只匹配一次,搜索结构match的数据结果为一维数组 preg_match_all:匹配全部,搜索结果match的数据结构为二维数组。
例子:
$str = ""; //匹配所有的邮箱 /** * ^[a-z] 必须是字母开头 * ([a-z0-9]*[-_]?[a-z0-9]+) * [a-z0-9]* 0个或者多个字母或者数字 * [-_]? 0个或者1个‘-‘或者‘_‘ * [a-z0-9]+ 1个或者多个数字或者字母 * @ 邮箱必需有个有@ * [\.] 一个‘.‘ ‘. + *‘ 需要在前面‘\. \+ \*‘转义 * [a-z]{2,3} 匹配2-3字母 * * ([\.][a-z]{2})? 匹配0个或者1个 (.2个字母) * i 表示忽略大小写 */ $reg="/^[a-z]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i"; echo preg_match($reg,$str);//1