正则表达式 一、基本定义及组成 组成:一个完整的表达式由字符簇,限定符,定位符等组成。 定义:正则表达式是有一定规则的字符串,这个字符串可以去另一个字符串或文本中获取匹配的结果,可以简单的理解为字符串查找函数的升级版。真正的用好正则表达式,正确的理解元字符是最重要的事情. 组成:一个完整的表达式由字符簇,限定符,定位符等组成。 ->>字符簇为字符的集合,例如:[jl_tech] 。 ->>限定符代表字符簇中字符出现次数的限定,例如:{m,n} ->>定位符即行的开始和结束: ^ 脱字符 表示一行的开始([^0-9]) $ 美元符 表示一行的结束 \b 单词分界符
正则表达式 二、字符簇写法 完整写法 [a-z] 所有的小写英文字母 [a-zA-Z] 所有的大小写英文字母 [0-9] 所有的数字 所有字母及数字 简写格式 \d 和 \D 代表数字,[0-9] 代表非数字,[^0-9] \w 和 \W 字母数字,[a-zA-Z0-9] 非字母和数字,[^a-zA-Z0-9] \s 和 \S 任何空白字符 非空白字符 \t \n \r 制表符 换行符 回车符
正则表达式 三、限定符写法 完整写法 {0,n} 代表0-n个 {0,} 代表0个以上 {n} 代表n个 {n,} 代表n个以上 简写格式 * 代表0次以上 + 代表1次以上 ? 代表0次或1次以上 匹配一次可以省略
正则表达式 四、匹配风格及函数比较 -》posix风格 1.用正则表达式匹配字符串 ereg(正则表达式,字符串,array) ------- 返回值mixed eregi(正则表达式,字符串,array) ------ 返回值mixed 2.用正则表达式拆分字符串 split(正则表达式,str) --------------- 返回值array -》perl风格 preg_match(正则表达式,字符串,array) ------- 返回值int(匹配一次终止) preg_match_all(正则表达式,字符串,array) ------- 返回值int preg_split(正则表达式,$string) ------- 返回值array
正则表达式 五、比较总结 风格 简写 匹配模式 引用变量 引用变量个数 posix x \0、\1 10个 perl √ $0、$1 100个 类别 PCRE是一个轻量级的函数库,比Boost的正则表达式库要小的多,十分易用,功能也很强大,性能也超过了一些经典的正则表达式库。
正则表达式 六、匹配模式 preg_match_all(“/x|y/i”,“axX”,$arr); //结果为xX i 忽略大小写 m 增强的行锚点模式 s 点号通配模式 x 宽松排列和注释模式 u 以utf-8读取正则表达式和目标字符串 e 将replacement作为PHP代码(只用于preg_replace) S 启用 PCRE的”study”优化尝试 U 修改匹配策略由贪婪(匹配尽可能多的字符)转为非贪婪(匹配尽可能少的字符)
正则表达式 七、反向引用(perl) 格式:变量:$0,$1,$2,$3,$4,$5............ $0里面放的是整个正则表达式匹配的结果 $1第一个子表达式匹配到的结果 $2第二个子表达式匹配到的结果 ………… 例:$str_time = ’12/30/2013’转化为:2013-12-30 preg_replace("/(\d{2})\/(\d{2})\/(\d{4})/","$3-$1-$2",$time)
正则表达式 八、小练习 1.匹配邮箱(大众化): /^\w+@\w+(\.\w+)+$/ E 2.验证身份证号码:/^\d{15}(\d{2}[A-Za-z0-9])?$/ 3.验证URL地址(普通):/^http://[\w]+\.[\w]+\.[a-zA-Z]{2,6}$/ 4.下面代码中变量$str的值为( ) $str=Preg_replace(“/(\d+)-(\d+)-(\d+)/”,”$0/$2”,”1-2-3”); A. 1-2-3/3 B. 1/3 C. 2/3 D. 1/2 E. 1-2-3/2 F. 语法错误 /^\w+@\w+(\.\w+)+$/ E