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调用Java对象的方法
Oct 09 PHP
在php中取得image按钮传递的name值
Oct 09 PHP
php单件模式结合命令链模式使用说明
Sep 07 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
php文件压缩之PHPZip类用法实例
Jun 18 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PHP实现的大文件切割与合并功能示例
Apr 10 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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
超级简单的php+mysql留言本源码
2009/11/11 PHP
php把大写命名转换成下划线分割命名
2015/04/27 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
thinkPHP2.1自定义标签库的导入方法详解
2016/07/20 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
FF IE兼容性的修改小结
2009/09/02 Javascript
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
2015/11/30 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
js实现自动播放匀速轮播图
2020/02/06 Javascript
python实现矩阵乘法的方法
2015/06/28 Python
Python单向链表和双向链表原理与用法实例详解
2018/08/31 Python
python微信撤回监测代码
2019/04/29 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
python IP地址转整数
2020/11/20 Python
为什么使用接口?
2014/08/13 面试题
环境科学毕业生自荐信
2013/11/21 职场文书
付款委托书范本
2014/04/04 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
处级干部考察材料
2014/12/24 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
Redis持久化与主从复制的实践
2021/04/27 Redis
JavaScript ES6的函数拓展
2022/01/18 Javascript