[总结]PHP正则表达式

来源:互联网 发布:淘宝的图片 编辑:程序博客网 时间:2024/06/06 18:34

一.正则表达式基础

1.什么是正则表达式

正则表达式是字符串搜索和匹配的工具

2.无孔不入的正则表达式

我们日常生活中使用的很多电子设备,无时无刻不在跟正则表达式打交道。

1.windows的文件搜索功能:
这里写图片描述

*.zip就是一种正则表达式的匹配

2.注册时的手机号码格式的验证
这里写图片描述

3.正则表达式的使用范围

不管你是使用PHP,还是Java,还是Js.都会用到正则表达式。
正则表达式,基本通用于各个编程语言,各个操作系统。

二.PHP中的正则函数

1.preg_match()与preg_match_all()

preg_match($pattern,$subject,$arr)(只匹配一次,匹配到就结束)
preg_match_all($pattern,$subject,$arr)(匹配到字符串结束)pref
返回值:都返回匹配到的次数(未匹配到返回0)

<?php $pattern="/[0-9]/";$subject="weur3ui7";preg_match($pattern,$subject,$m1);preg_match_all($pattern,$subject,$m2);print_r($m1);//Array ( [0] => 3 )print_r($m2);//Array ( [0] => Array ( [0] => 3 [1] => 7 ))

2.preg_replace与preg_filter()

preg_replace($pattern,$replacement,$subject)
preg_filter($pattern,$replacement,$subject)

1.当$pattern,$replacement都是字符串的时候

<?php header("content-type:text/html;charset=utf-8");$pattern="/[0-9]/";$subject="weur3ui7";$replacement="中国";$str1=preg_replace($pattern,$replacement,$subject);$str2=preg_filter($pattern,$replacement,$subject);echo $str1."<br/>";//weur中国ui中国echo $str2."<br/>";//weur中国ui中国

2.当$pattern,$replacement都是数组的时候

<?php header("content-type:text/html;charset=utf-8");$pattern=array("/[0-3]/","/[3-9]/");$subject="weur3ui7";$replacement=array("中","国");$str1=preg_replace($pattern,$replacement,$subject);$str2=preg_filter($pattern,$replacement,$subject);echo $str1."<br/>";//weur中ui国echo $str2."<br/>";//weur中ui国

3.当$pattern、$replacement、$subject都是数组时。

<?php header("content-type:text/html;charset=utf-8");$pattern=array("/[0-3]/","/[3-9]/");$subject=array("weur","3ui7");$replacement=array("中","国");$str1=preg_replace($pattern,$replacement,$subject);$str2=preg_filter($pattern,$replacement,$subject);print_r($str1)."<br/>";//Array ( [0] => weur [1] => 中ui国 )print_r($str2)."<br/>";//Array ( [1] => 中ui国 )

于是,我们总结:
1.$pattern与$replacement可以都是字符串或都是数组(查找与替换要一一对应

2.$subject可以为字符串或数组。当时数组是,对$subject的每一个元素都执行查找替换。

3.如果preg_filter()没有查找到元素,即没有匹配到,就不会返回结果;
但preg_replace()纵使没有匹配成功,也会返回原来的字符串。

3.preg_grep()

preg_filter() 返回 匹配到并且替换后的字符串
preg_grep() 返回 匹配到的字符串

两者共同点:过滤作用(没被$pattern匹配到的都过滤掉)

<?php header("content-type:text/html;charset=utf-8");$pattern='/[0-9]/';//这里的$pattern只可以是字符串类型,不可以是数组类型$subject=array("weur","3ui7");$str=preg_grep($pattern,$subject);print_r($str);//Array ( [1] => 3ui7 )

4.preg_split()

preg_split($pattern,$subject)
$subject匹配到符合$pattern的,就做一次分割。返回分割后的字符串组成的数组。

<?php header("content-type:text/html;charset=utf-8");$pattern='/[0-9]/';$subject="你5好2吗?";$str=preg_split($pattern,$subject);print_r($str);//Array ( [0] => 你 [1] => 好 [2] => 吗? )

其实,就是一个升级版本的explode()函数

5.preg_quote()

将正则表达式的运算符进行转义。

<?php header("content-type:text/html;charset=utf-8");$pattern='/[0-9]/';$str=preg_quote($pattern);print_r($str);//   /\[0\-9\]/

注意:基本上每个函数都是以$pattern开头

三.正则表达式基本语法

1.界定符:

标志着正则表达式的开始和结束

/正则表达式/(/为界定符)
还有两种:##{}

不过,还是以 / 最流行。

2.原子

正则表达式所匹配到的最小单位
可见原子:我们键盘上所能打出的可见的字符(如a-z 0-9 &)(<>)
不可见原子:存在但看不到的字符(如 \t制表符 \n回车符 空格符)

3.元字符

1.运算符号
| 选择
[] 匹配[]中的任意一个原子
[^] 匹配除了[]中的任意原子

注意:[^0-9]匹配除了0-9之外的任意内容 ^[0-9]匹配开头是数字的内容

2.匹配一类原子
. 匹配除换行符之外的任一原子
\d 匹配任意十进制数[0-9]
\D 匹配任意非十进制数[^0-9]
\s 匹配任意非可见原子
\S 匹配任意可见原子
\w 匹配[a-z A-Z 0-9 _]
\W 和\w相反

4.量词

{m}恰好出现m次
{m,}出现m次以上
{m,n}出现m-n次
* 出现0次、1次或多次
+出现1次及以上
?出现0-1次

比如\d{5}表示连续出现的5个数字

5.边界控制与模式单元

5.1边界控制

^ 表示必须以^后面的某个字符开头
$ 表示必须以$前面的某个字符结尾

5.2模式单元

() 里面括的整体,算作一个原子。

四.修正模式

所谓修正模式,就好像手机里的情景模式。修正模式规定了正则表达式以怎样的方式来匹配。

1.贪婪模式与懒惰模式

贪婪模式是正则表达式默认的模式。(也就是当出现歧义的时候,匹配最多的情况)
懒惰模式要用U来指定。(也就是当出现歧义的时候,匹配最少的情况)

<?php header("content-type:text/html;charset=utf-8");$pattern1='/imooc.+123/';//贪婪模式$pattern2='/imooc.+123/U';//懒惰模式$subject="I love imooc__123123123";preg_match($pattern1,$subject,$arr1);preg_match($pattern2,$subject,$arr2);print_r($arr1);//imooc__123123123print_r($arr2);//imooc__123

2.忽略大小写

忽略大小写使用 i 模式

3.忽略空白

忽略空白使用 x 模式
空白包括:空格、换行、制表符。

4.使得点(.)匹配任意字符

使用s模式,可以使点(.)匹配任意字符,包括换行符。

五.常见的正则表达式

1.匹配手机号
/^1(3|4|5|7|8)\d{9}/

2.匹配e-mail地址
^\w+(.\w+)*@\w+.{1}(com|cn|com.cn|org)
可以匹配:
919696910@qq.com
eric.liu@qq.com

推荐一款正则表达式在线验证工具,可以实时检测正则表达式是否书写正确。
regexpal

regexpal

0 0
原创粉丝点击