PHP技术

当前位置:首页 > PHP技术 >

PHP正则表达式:匹配规则

时间:2015-10-07        阅读:次        QQ群:182913345

表达式是有字符串及有特殊含义的元字符组合而成的,下面介绍几种常用匹配规则。
 
1、字符组,用[]括起来来表示里面任意一个字符。如 [abc] 表示a或b或c。如果是连续的字符或数字,可用 – 来简写。如 [0-9]代表0至9 这10个数字,[a-z]代表a至z 这26个字母。注意:[^...]表示除了里面的字符外的任意字符。如 [^ab] 除了a和b以外的任意字符。
 
2、转义
如果想查找或匹配元字符本身,比如*、?等,直接写会匹配出错解释成其他意思。这时就使用 \来取消这些字符的特殊意义。因此,应该使用\*、\?。转义就是防止特殊字符被解析。如果匹配\就需用 \\来表示啦。正则表达式是不是遇到特殊字符匹配时就要转义呢?答案是否定的。转义只有在一定条件下,比如可能引起歧义或者被误解析的情况下才需要。
 
3、反义
有些时候,查找的字符不属于某个字符类,或者表达式和已知定义相反,这是需要用到反义。
 
常用反义
\W 匹配任意不是字母、数字、下划线的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是\w开头或结束的位置
[^aeiou] 匹配除了aeiou这几个字符以外的任意字符
 
4、分支
分支就是存在多种可能的匹配情况。用 | 表示分支。分支可以是多个字符及复杂的表达式。
a|b 表示 a或b
25[0-5]|2[0-4]\d|[01]?\d{1,2} 表示000-255之间的数字
注意:匹配分支条件时,将从左到右匹配,如果满足某个分支,就不会继续下一个分支条件。即第一次匹配后就跳出。
 
5、分组
分组,使用小括号指定子表达式。
 
常用分组语法
(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可写成 (?’name’exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(? (?#comment) 提供注释辅助阅读,不对正则表达式的处理产生影响
 
6、反向引用
反向引用用于重复搜索前面某个分组匹配的文本。如 \1 代表分组1匹配的文本。
\b([\w]+)\b\s+\1\b
上面的表达式可以匹配重复的单词,例如 get get 或 he he。
 
7、环视
断言用来声明一个应该为真的事实。下面介绍四个断言,它们用于查找在某些内容或不是某些内容之前或之后,也就是一个位置应该满足一定条件。
 
(?=exp)
顺序肯定环视,断言自身出现位置的后面能匹配表达式exp。如匹配以“ing”结尾单词前面部分,可使用下面表达式。
\b\w+(?=ing\b)
 
(?<=exp)
逆序肯定环视,断言自身出现位置的前面能匹配表达式exp。如匹配以 re开头的单词的后半部分,可使用下面表达式。
(?<=\bre)\w+\b
 
(?!exp)
顺序否定环视。断言此位置的后面不能匹配表达式exp。如匹配3位数字,且这3位数字之后不能是数字,可使用下面表达式。
\d{3}(?!\d)
 
(? 逆序否定环视。断言此位置前面不能匹配表达式exp。如匹配前面不是小写字母的7位数字,可使用下面表达式。
(?
 
8、贪婪/懒惰匹配模式
当正则表达式中包含可接受重复的限定字符时,通常的行为为(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。例如以下表达式将匹配以a开始,以b结束的最长字符串。
a.*b
如果用来匹配搜索“aabab”,它会匹配整个字符串aabab。这就是贪婪模式。
有时,需要匹配尽可能少的字符,也就是懒惰模式。只要在相应的限定符后面加上一个问号即可。如匹配以a开始、以b结束的最短字符串,正则表达式为
a.*?b
 
常用懒惰限定符
*? 重复任意次,但尽可能少重复
+? 重复一次或多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

上一篇:PHP正则表达式:基础知识

下一篇:ThinkPHP实现文件下载的方法

扫一扫,更多精彩内容推送

PHP技术分享

分享PHP技术,前端技术,数据库,SEO优化,服务器,网络安全等知识,是php程序员工作学习的好帮手!

Copyright © 2013-2015.PHP技术分享 www.php520.cn  版权所有  网站地图    PHP学习交流群

免责声明:网站内容收集于互联网,本网站不承担任何由于内容的合法性及健康性所引起的争议和法律责任。

欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。 沪ICP备15014499号-2