浅谈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截取中文字符串的问题
Jul 12 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
php中explode函数用法分析
Nov 15 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 PHP
php实例化一个类的具体方法
Sep 19 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语法(4)
2006/10/09 PHP
用php+mysql一个名片库程序
2006/10/09 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
JavaScript寄生组合式继承实例详解
2018/01/06 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
node创建Vue项目步骤详解
2020/03/06 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
Python模块学习 datetime介绍
2012/08/27 Python
Python计算一个文件里字数的方法
2015/06/15 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
CSS3 icon font完全指南(CSS3 font 会取代icon图标)
2013/01/06 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
纺织工程专业个人求职信范文
2014/01/27 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
白酒市场营销方案
2014/02/25 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
小学四年级学生评语
2014/12/26 职场文书
罚款通知怎么写
2015/04/22 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
nginx配置限速限流基于内置模块
2022/05/02 Servers