正则表达式的作用:分割,查找,匹配,替换
组成部分:
(1)分割符: 正斜线(/),hash符号(#),取反符号(~)
(2)通用原子: \d(十进制0-9),\D(除了0-9),\w(数字字母下划线),\W(除了数字字母下划线),\s(空白符),\S(除了空白符)
(3)元字符: . (除了换行符的任意字符),*(匹配前面的字符0次,1次或多次),?(0次或1次),^ (必须以它开头),$(必须以它结尾),+ (出现一次或多次),[] (数组中某一个), {n} 出现n次 ,(n)匹配n
(4) 模式修正符: i(不区分大小写) U(去除贪婪模式)s(可以匹配换行符) x(空白忽略不计)
贪婪模式:尽可能匹配多的字符串
懒惰模式:尽可能匹配少的字符串
举例:a.*b 匹配 aabaab 贪婪模式: 结果为 aabaab 懒惰模式 : 结果为 aab
正则表达式函数:
$parttern : 替换形式
$subject : 目标字符串
(1) preg_match( $parttern ,$subject,[array $matches]) :匹配一次 返回0或1
(2)preg_match_all( $parttern ,$subject,[array $matches]):匹配多次 返回0或1
(3)preg_split( $parttern ,$subject,[int $limit]):以$parttern的形式 截取字符串 返回替换后的子字符串
(4)preg_replace($parttern,$replacement,$subject) : 搜索$parttern,用$replacement将其替换
实例:
①邮箱:
分析:1256@qq.com 分为五部分:
(1)最少三位,数字字母或下划线 (2) @ (3)数字字母下划线 (4). (5)com或者cn
<?php
$pattern = '/^\w{3,}@([a-z]{2,7}|[0-9]{3})\.(com|cn)$/';
$subject = '1235@163.com';
preg_match_all($pattern, $subject, $matches);
var_dump($matches);
②电话号码:
分析: 168888999999 固定长度11位,首位为1,其余十位全为数字
<?php
$pattern = '/^(1)\d{10}/';
$subject = '12357846912';
preg_match_all($pattern, $subject, $matches);
var_dump($matches);
③IP地址
<?php
$pattern = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
$subject = '12.35.784.692';
echo preg_match_all($pattern, $subject, $matches)."\n";
var_dump($matches);