PHP-正则表达式整理

2019-03-16  本文已影响0人  AGEGG

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}

[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]+$

上一篇下一篇

猜你喜欢

热点阅读