浅谈PHP正则表达式中修饰符/i, /is, /s, /isU


Posted in PHP onOctober 21, 2014

在学习PHP正则表达式修饰符之前先来理解下贪婪模式,前面在元字符中提到过"?"还有一个重要的作用,即"贪婪模式",什么是"贪婪模式"呢?

PHP正则表达式贪婪模式

比如我们要匹配以字母"a"开头字母"b"结尾的字符串,但是需要匹配的字符串在"a"后面含有很多个"b",比如"a bbbbbbbbbbbbbbbbb",那正则表达式是会匹配第一个"b"还是最后一个"b"呢?如果你使用了贪婪模式,那么会匹配到最后一个"b",反之只是匹配到第一个"b"。

PHP正则表达式贪婪模式使用实例

/a.+?b/  
/a.+b/U

对比不使用贪婪模式的实例如下:

/a.+b/ 

上面使用了一个修饰符U,详见关于修饰符的介绍。

PHP正则表达式 /i, /is, /s, /isU等 都是些什么东西呢?
 
i 不区分大小写
 
s 模式中的圆点元字符(.)匹配所有的字符,包括换行符
 
x 模式中的空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符,包括两 头,也都被忽略
 
A (PCRE_ANCHORED) 如果设定了此修正符,模式被强制为“anchored”,即强制仅从目标字符串的开头开始匹配即自动在模式开头加上^。
 
D (PCRE_DOLLAR_ENDONLY) 如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。没有此选项时,如果最后一个字符是换行符的话,美元符号也会匹配此字符之前(但不会匹配 任何其它换行符之前)。如果设定了 m 修正符则忽略此选项。Perl 中没有与其等价的修正符。  S 当一个模式将被使用若干次时,为加速匹配起见值得先对其进行分析。如果设定了此修正符则会进行额外的分析。目前,分析一个模式仅对没有单一固定起始字符的 non-anchored 模式有用。
 
U (PCRE_UNGREEDY) 本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。这和 Perl 不兼容。也可以通过在模式之中设定 (?U) 修正符来启用此选项。
 
X (PCRE_EXTRA) 此 修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将 来扩充。默认情况下,和 Perl 一样,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。当前没有其它特性受此修正符控制。即:贪婪模式,最 大限度匹配 如:/a[\w]+?e/U匹配abceadeddd中的abceade而不是abce,如果不加U修正,则匹配abce  u (PCRE_UTF8) 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。本修正符在 Unix 下自 PHP 4.1.0 起可用,在 win32 下自 PHP 4.2.3 起可用。

PHP正则表达式修饰符的理解

在PHP正则表达式里面的修饰符可以改变正则的很多特性,使得正则表达式更加适合你的需要(注意:修饰符对于大小写是敏感的,这意味着"e"并不等于"E")。

PHP正则表达式修饰符的种类及介绍:

◆i :如果在修饰符中加上"i",则正则将会取消大小写敏感性,即"a"和"A" 是一样的。

◆m:默认的正则开始"^"和结束"$"只是对于正则字符串如果在修饰符中加上"m",那么开始和结束将会指字符串的每一行:每一行的开头就是"^",结尾就是"$"。

◆s:如果在修饰符中加入"s",那么默认的"."代表除了换行符以外的任何字符将会变成任意字符,也就是包括换行符!

◆x:如果加上该修饰符,表达式中的空白字符将会被忽略,除非它已经被转义。

◆e:本修饰符仅仅对于replacement有用,代表在replacement中作为PHP代码。

◆A:如果使用这个修饰符,那么表达式必须是匹配的字符串中的开头部分。比如说"/a/A"匹配"abcd"。

◆E:与"m"相反,如果使用这个修饰符,那么"$"将匹配绝对字符串的结尾,而不是换行符前面,默认就打开了这个模式。

◆U:和问号的作用差不多,用于设置"贪婪模式"。

PHP正则表达式修饰符的相关内容就向你介绍到这里,希望对你了解和掌握PHP正则表达式修饰符有所帮助。

PHP 相关文章推荐
一个多文件上传的例子(原创)
Oct 09 PHP
oracle资料库函式库
Oct 09 PHP
PHP4与PHP5的时间格式问题
Feb 17 PHP
用Simple Excel导出xls实现方法
Dec 06 PHP
分享PHP header函数使用教程
Sep 05 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
typecho插件编写教程(六):调用接口
May 28 PHP
php中smarty变量修饰用法实例分析
Jun 11 PHP
Yii实现复选框批量操作实例代码
Mar 15 PHP
零基础php编程好学吗
Oct 11 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 PHP
php读取目录及子目录下所有文件名的方法
Oct 20 #PHP
php中的字符编码转换函数用法示例
Oct 20 #PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
Oct 20 #PHP
php的ZipArchive类用法实例
Oct 20 #PHP
php自定义apk安装包实例
Oct 20 #PHP
php防止站外远程提交表单的方法
Oct 20 #PHP
php获取textarea的值并处理回车换行的方法
Oct 20 #PHP
You might like
php使用mkdir创建多级目录入门例子
2014/05/10 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
js的event详解。
2006/09/06 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
表单中单选框添加选项和移除选项
2016/07/04 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
重命名批处理python脚本
2013/04/05 Python
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
给Python初学者的一些编程技巧
2015/04/03 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python中字符串对齐方法介绍
2015/05/21 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python入门Anaconda和Pycharm的安装和配置详解
2019/07/16 Python
python错误调试及单元文档测试过程解析
2019/12/19 Python
Python模拟伯努利试验和二项分布代码实例
2020/05/27 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
电脑饰品店的创业计划书
2014/01/21 职场文书
班级标语大全
2014/06/21 职场文书
会计个人实习计划书
2014/08/15 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
优秀英文求职信范文
2015/03/19 职场文书
师德承诺书2015
2015/04/28 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书