PHP-正则表达式整理
1.PHP正则表达式函数
preg_math($patern,$subject,[array & $matches])//匹配一次
preg_math_all($patern,$subject,array & $matches)//匹配多次
return 匹配到结果的次数
preg_replace($pattern,$replacement,$subject)//发生替换和未发生替换都保留
preg_filter($pattern,$replacement,$subject)//保留发生替换的字符串
preg_grep($pattern,$array $input)//preg_grep函数只会去做匹配的操作,不做替换
阉割版preg_filter
preg_split($patern,$subject)
//类似explode(),以$patern作为分割点,分割$subject
preg_quote($str)//转义正则运算符$str
正则运算符
.\+*?[^]$(){}=!<>|:-
preg_math 表单验证
preg_replace 非法词语过滤
2.正则表达式基本语法
界定符,原子,量词,边界控制,模式单元
2.1界定符
表示一个正则表达式的开始和结束
$pattern = '/[0-9]/';
这几种都可以: /[0-9]/ #[0-9]# {[0-9]} 推荐// ##
推荐工具regexpal
2.2原子
可见原子:Unicode编码表中键盘输出后肉眼可见的字符
如:标点
英文字母数字
汉字其他语言文字
数理化公式等
不可见原子
换行符\n
回车\r
制表符\t
空格
等
文字建议转化为Unicode编码来匹配
匹配正则表达式运算符前加 \ 来转义
2.3元字符
原子的筛选方式
| 匹配两个或者多个分支选择
[] 匹配方括号中的任意一个原子
[^] 匹配除方括号中的原子之外的任意字符
原子的集合
. 除换行符之外的任意字符
\d 任意一个十进制数字[0-9]
\D 任意一个非十进制数字即[^0-9]
\s 任意一个不可见原子(空格、换行符、换页符、回车符、字表符)即[\f\n\t\v]
\S 任意一个可见原子即[^\f\n\t\v]
\w 任意一个数字、字母或下划线即[0-9a-zA-Z_]
\W 任意个非数字、字母或下划线即[^0-9a-zA-Z_]
3.量词
{n} 表示前面的原子恰好出现n次
{n,} 表示前面的原子最少出现n次
{n,m} 表示前面的原子最少出现n次,最多出现m次
匹配0次、1次或者多次其之前的原子,即{0,}
匹配1次或者多次其之前的原子,即{1,}
? 匹配0次或者1次其之前的原子,即{0,1}
[a-z]{2}//小写字母连续出现2次
\w{4}//数字、字母或下划线连续出现4次
4.边界控制
^匹配字符串开始的位置
$匹配字符串结束的位置
()匹配其中的整体为一个原子
5.模式单元
(D|d)ung~
匹配出 Duang~duang~
6.修正模式
贪婪匹配:匹配结果存在歧义时取其长
懒惰匹配:匹配结果存在歧义的取其短
//默认贪婪模式, //后加U为懒惰模式
$pattern = '/agegg.+123U/';
$subject = 'i am agegg__123123123';
$matches = array();
preg_math($pattern,$subject,$matches);
show($matches);
function show($var=null){
if(empty($var)) {
echo 'null';
} elseif(is_array($var)||is_object($var)){
echo '<pre>';
print_r($var);
echo '</pre>';
} else {
echo $var;
}
}
常见修正模式
U 懒惰匹配
i 忽略英文字母大小写
x 忽略空白
s 让元字符' . '匹配包括换行符在内的所有字符
e
EX
//非空
.+
//保留两位数字浮点数
\d+|.\d{2}$
//手机号
1(3|5|7|8|4)\d{9}
//email地址
^\w+(\.\w+)*@\w+(\.\w+)+$
//URL地址
^(https?://)(\w+\.)+[a-zA-Z]+$