PHP中的正则表达式函数介绍


Posted in PHP onFebruary 27, 2012

正则表达式(Regular Expression)

正则表达式系统:

1.POSIX

2.Perl

PHP中使用的regex是PCRE:

NOTE:PCRE(Perl兼容正则表达式,Perl Compatible Regular Expressions)

PCRE语法:

1.定界符

必须成对出现,可以使用除0-9a-zA-Z\以外的任何字符

2.原子

1.正则需要匹配的可见和不可见字符都是原子

2.一个正则表达式最少含有一个原子

3.当需要匹配诸如"("、"["、"^"等含有语义的符号时需要用"\"反斜线进行转义

原子字符:

\f 匹配换页符

\n 匹配换行符

\r 匹配回车符

\t 匹配制表符

\v 匹配垂直制表符

3.元字符

\ 转义字符

^ 匹配字符串起始处

$ 匹配字符串末尾

. 匹配除"\n"之外的任何单个字符

* 匹配前面的子表达式0或多次

+ 匹配前面的子表达式1次或多次

? 匹配前面的子表达式0次或1次

{n} 匹配n次

{n,} 匹配n次或n次以上

{n,m} 最少匹配n次至多匹配m次,(n<=m)

[] 中括号代表原子表,中间的原子地位都是相等。在匹配的时候,匹配表中的任意一个字符

[^] 抑扬符,排除后面的原子表所包含的字符。

(pattern) 匹配pattern并获取这一匹配。

\num 对获取的第num个匹配的引用。

(?:pattern) 匹配pattern但不获取这一匹配

(?=pattern) 正向肯定预查,非获取匹配,例如:windows(?=XP|7)能匹配windowsXP中的windows不能匹配windows98中的windows

(?!=pattern) 正向否定欲查非获取匹配,例如:windows(?!98|2000),能匹配windowsXP中的windows,不能匹配windows98中的windows

(?<=pattern) 反向肯定预查,非获取匹配。例如:(?<=My|Postgre)SQL能匹配MySQL中的SQL,不能匹配MSSQL中的SQL

(?<!pattern) 反向否定预查,非获取匹配。例如:(?<!My|Postgre)SQL能匹配MSSQL中的SQL,不能匹配MySQL中的SQL

\b 匹配单词边界

\B 匹配除单词边界以外的字符


\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]

4.模式修正符

i 不区分大小写

m 此模式中如果有回车或换行,^和$将匹配每行的行首和行尾

s 让.能匹配\n

x 忽略空白

U 取消贪婪,相当于(.*?)

A 与^效果一样

D 结尾处不忽略回车 ,在结束处有$符的时候,在匹配的字符串后面加上回车,$依然能够匹配它成功。但是加上D之后,结尾的回车,不再匹配

  NOTE:正则表达式是从左向右进行匹配的

相关函数:

preg_filter — 执行一个正则表达式搜索和替换

preg_grep — 返回匹配模式的数组条目

preg_last_error — 返回最后一个PCRE正则执行产生的错误代码

preg_match_all — 执行一个全局正则表达式匹配

preg_match — 执行一个正则表达式匹配

preg_quote — 转义正则表达式字符

preg_replace_callback — 执行一个正则表达式搜索并且使用一个回调进行替换

preg_replace — 执行一个正则表达式的搜索和替换

preg_split — 通过一个正则表达式分隔字符串

PHP 相关文章推荐
php 字符转义 注意事项
May 27 PHP
PHP 引用是个坏习惯
Mar 12 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
深入浅出php socket编程
May 13 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
解决nginx不支持thinkphp中pathinfo的问题
Jul 21 PHP
PHP发送短信代码分享
Aug 11 PHP
php使用timthumb生成缩略图的方法
Jan 22 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 #PHP
一些需要禁用的PHP危险函数(disable_functions)
Feb 23 #PHP
PHP面向对象法则
Feb 23 #PHP
优化PHP程序的方法小结
Feb 23 #PHP
数据库中排序的对比及使用条件详解
Feb 23 #PHP
PHP中几个常用的魔术常量
Feb 23 #PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 #PHP
You might like
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
php验证是否是md5编码的简单代码
2014/04/01 PHP
php定界符
2014/06/19 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
vue实现的网易云音乐在线播放和下载功能案例
2019/02/18 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
初学python数组的处理代码
2011/01/04 Python
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
python实现归并排序算法
2018/11/22 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
python操作cfg配置文件方式
2019/12/22 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
HR求职自荐信范文
2014/06/21 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
vue自定义右键菜单之全局实现
2022/04/09 Vue.js