PHP知识点(3) - 正则

组成:
        定界符//
        原子
        元字符
        模式修正符
 
一、原子
每个模式中至少要包含一个原子
普通的原子:0-9 a-z A-Z
一些特殊符号和元字符作为原子:需要转义,如. * + ?等
一些非打印字符:\n \f \r \t \v \cx
通用字符类型:\d \D \s \S \w \W
自字义原子表:[],从原子表中只能选择一个原子进行匹配
 
 
二、元字符
*
+
?
.
|
{n}
{n,}
{n,m}
^或\A
$或\Z
\b单词的边界
\B非单词边界
[]
[^]
()
 
注意点:
1、“.”通常可以使用“.*?”或“.+?”组合来匹配除换行符以外的任何字符串,取消贪婪模式
2、后向引用,使用原字符()标记的开始和结束,存储匹配的缓冲区编号从1开始,连续编号直至99。每个缓冲区都可以使用\n来访问,其中n为一个标识特定缓冲区的一位或两位十进制数。如\1,\2,\3等形式,在正则中使用还需要加上\转义,例如:\\1,\\2。当需要使用模式单元,而又不想存储匹配结果时,可以使用非捕获元字符,“?:”,"?=","?!",来忽略对匹配结果的保存。
 
 
三、模式修正符
i:不区分大小写
m:将字符串视为多行
s:如果加上此字符,模式中的原点”.“匹配所有字符,包括换行符\f
x:模式中的空白忽略不计,除非它已经被转义
e:只用在preg_replace 中,该函数在逆向引用做正常替换,将其作为PHP代码求值,并用其结果来替换所搜索的字符串,见细说PHP第307页例。
U:不要和.*?一起使用,否则会再次启用贪婪模式
D:加上此修饰符后,模式中的$仅匹配结尾,如果加上m多行模式,则忽略此选项。
 
与Perl兼容的正则函数
字符串的匹配与查找:
1、int preg_match(pattern,subject[ ,array matchs])按指定的正则表达式,对字符串进行搜索和匹配一次,第一个参数是正则,第二个参数是字符串,第三个参数是匹配的结果放到这个数组中,最终返回结果是0或1
 
2、int preg_match_all(pattern,subject,array matchs[ ,int flags]),按照指定的正则匹配到字符串的末尾,可以获得所有的匹配结果,前三个参数同上,第四个参数有以下两个值:
PREG_PATTERN_ORDER:默认,对结果排序使用$matchs[0]为全部模式匹配的数组,$matchs[1]为第一个括号中的子模式所匹配的字符串组成的数组。
PREG_SET_ORDER:对结果排序使$matchs[0]为第一组匹配项的数组,$matchs[1]为第二组匹配项的数组,依此类推
 
3、array preg_grep(string pattern, array input)匹配数组中的元素,返回与正则表达式匹配的单元,返回值为一个数组
 
字符串替换:
mixed preg_replace(mixed pattern, mixed replacement, mixed subject, [, int limit])
第四个参数可选 ,则仅替换Limit 个匹配项
a):三个参数都是字符串
b):前三个参数都可以是数组,如果第二个参数少于第一个参数,则用空串替换掉匹配的项目
c):第一个参数参是数组,第二个是字符串,刚第一个参数的匹配的所有值都用在此串上
d):第一个参数是数组,第二个是数组,第三个是字符串,像书中例子上的UBB代码一样。
 
模式修正符e用在此函数上
 
str_replace();前两个参数可以是串,也可以是数组,第二个参数如果是串,则用该串替换第一个参数的所有项,通常第一个第二个参数相等。如果第二个参数少于第一个个数,用空串代替。
 
4、array  preg_split(separator pattern, string[, limit[, flag]]) 将第二个参数给定的字符串按照第一个正则规则进行做分隔,第三个参数为分隔次数限制 ,第四个参数参考细说PHP第二版311页
 
常见正则:
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配空白行的正则表达式:\n\s*\r
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
匹配腾讯QQ号:[1-9][0-9]{4,}
匹配中国邮政编码:[1-9]\d{5}(?!\d)
日期格式:^\d{4}-\d{1,2}-\d{1,2}
 
 
 

PHP知识点(3) - 正则,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。