浅谈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 相关文章推荐
PHP实现MVC开发得最简单的方法――模型
Apr 10 PHP
php截取中文字符串函数实例
Feb 23 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 PHP
php基于闭包实现函数的自调用(递归)实例分析
Nov 11 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
PHP检测一个数组有没有定义的方法步骤
Jul 20 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 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生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
vue项目中使用fetch的实现方法
2019/04/25 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
python Django模板的使用方法
2016/01/14 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Python实现按中文排序的方法示例
2018/04/25 Python
Python多线程原理与用法详解
2018/08/20 Python
使用CSS3制作一个简单的进度条(demo)
2017/05/23 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
大学生工作推荐信范文
2013/12/02 职场文书
农村婚庆司仪主持词
2014/03/15 职场文书
《梅花魂》教学反思
2014/04/30 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
节约用水广告语60条
2019/11/14 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB