浅谈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动态图像的创建
Oct 09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
php 连接mssql数据库 初学php笔记
Mar 01 PHP
php抓取https的内容的代码
Apr 06 PHP
解析PHP正则提取或替换img标记属性
Jun 26 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP+AJAX实现投票功能的方法
Sep 28 PHP
orm获取关联表里的属性值
Apr 17 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 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
重置版游戏视频
2020/04/09 魔兽争霸
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
5 cool javascript apps
2007/03/24 Javascript
JS 建立对象的方法
2007/04/21 Javascript
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
js转义字符介绍
2013/11/05 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
Bootstrap每天必学之轮播(Carousel)插件
2016/04/25 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
python爬虫基础知识点整理
2020/06/02 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
python RSA加密的示例
2020/12/09 Python
专业实习自我鉴定
2013/10/29 职场文书
给校长的建议书
2014/03/12 职场文书
给老婆的保证书范文
2014/04/28 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
个人收入证明范本
2015/06/12 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
mysql优化
2021/04/06 MySQL
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
把77A收信机改造成收音机
2022/04/05 无线电