php正则表达式

来源:互联网 发布:网络曝光平台 编辑:程序博客网 时间:2024/05/16 01:43

正则表达式的基本语法:

界定符

原子

量词

边界控制

模式单元

-------------------------------------------------------------------------------------------------------------------------

界定符

表示一个正则表达式的开始和结束,有三种写法!

$pattern = '/[0-9]/';

#[0-9]#

{[0-9]}                                    一般不使用这个,会和大括号产生歧义

-------------------------------------------------------------------------------------------------------------------------

正则表达式的工具:regexpal,正则表达式的调试工具

调试工具地址:http://regexpal.isbadguy.com/


-------------------------------------------------------------------------------------------------------------------------

原子

正则表达式中最小的匹配单位,通常是unicode编码表的某一个字符,原子分为两种,可见原子,不可见原子。


不可见原子:

换行符\n  回车\r 制表符\t 空格 等其他不可见符号

-------------------------------------------------------------------------------------------------------------------------

原子的筛选方式

- | 匹配两个或者叫多个分支的选择

- [] 匹配方括号中的任意一个原子

- [^] 匹配除方括号中的原子之外的任意字符

-------------------------------------------------------------------------------------------------------------------------

原子的集合

- . 匹配除换行符之外的任意字符

- \d 匹配任意一个十进制数字,即[0-9]

- \D匹配任意一个非十进制的数字 ,即[^0-9]

- \s 匹配一个不可见原子,即[\f\n\r\t\v]

- \S 匹配一个可见原子,即[^\f\n\r\t\v]

- \w 匹配任意一个数字、字母或下划线,即[0-9a-zA-Z_]

- \W 匹配任意一个非数字、字母或下划线,即[^0-9a-zA-Z_]
-------------------------------------------------------------------------------------------------------------------------

量词

{n}  表示其前面的原子恰好出现n次

{n,}  表示其前面的原子最少出现n次

{n,m}  ....n-m次  你懂得

* 匹配0次,1次或者多次的原子即{0,}

+ 匹配一次或者多次之前的原子,即{1,}

? 匹配0次或者1次其之前的原子,即{0,1}

-------------------------------------------------------------------------------------------------------------------------

边界控制与模式单元

^  匹配字符串开始的位置

$  匹配字符串结尾的位置

() 匹配其中的整体为一个原子
-------------------------------------------------------------------------------------------------------------------------

修正模式:贪婪模式(默认)  、   懒惰模式(U)加大写的U

$pattern='/xxxxxxxxxxxx/U';


常见的修正模式:

U/u - 懒惰匹配/贪婪匹配

i  - 忽略英文字母大小写

x - 忽略空白

s - 让元字符    .      匹配包括换行符在内的所有字符

e -   


eg:匹配所有的邮箱

^\w+(\.\w+)*@\w+(\.\w+)+$

eg:匹配所有的URL

^(https?://)?(\w+\.)+(com|cn)$

-------------------------------------------------------------------------------------------------------------------------

preg_match() 和 preg_match_all():

preg_match()只判断是否匹配上,返回值是0或者是1也就是是不是匹配上.

preg_match_all()把所有匹配的结果都放到$arr里,注意这个$arr是&的,所以会直接修改数组。

另外结果的$arr[0]是全部匹配成功的模式字符串,$arr[1]是只包括匹配成功的字符串。


preg_replace() 和 preg_filter():

preg_replace()是str_replace的加强版,它第一个参数传入的值是$pattern也就是正则字符串,所以它很强大。

这两个函数的作用都是匹配并替换内容返回结果,这次不是&了  ,会返回一个数组或字符串“副本”。

注意:两者的区别是,filter 是过滤的意思,也就是说,如果$subject,要匹配的内容传入的是一个数组的话,preg_filter()就会过滤掉没有匹配上的数组单元,如图:

结果:


代码:



preg_grep($pattern,array $input):

相当于阉割版的preg_filter();它只做匹配不做替换,无法匹配的将会被替换.


preg_split($pattern,$subject):

preg_split()是explode()的加强版;

利用$pattern,的值来分割$subject成数组;


preg_quote($str);

正则运算符转义;


0 0