####正则表达式的应用
- php有两套正则函数:由PCRE库提供的函数,以"preg_"为前缀命名
- 由POSIX扩展提供的函数,以"ereg_"为前缀命名(自PHP5.3就不在推荐使用POSIX正则函数库)
- 在PHP中,一个正则表达式分为三个部分:分隔符,表达式和修饰符
#####元字符 b 是正则表达式规定的特殊代码,代表单词的开头或者结尾
bheb.*bisb 这里的'.'是元字符,匹配换行符以外的任意字符,’‘同样是元字符,它代表的是数量。因此"."和""意味着任意数量不包含换行的字符
1) 匹配以字符"a"开头的单词:
bw*b (w* )代表着任意数量的字母或数字
2)匹配一个或者更多的连续的数字
d+ "+"匹配重复一次或更多次
3)匹配刚好6个字符的单词
bw{6}b
4)匹配电话号:
0dd-dddddddd 或者0d{2}-d{8}
#####起始和结束元字符
1)匹配QQ号
^d{5,11}$ 匹配的开始和结束都是数字的且连续5~11次
点号:要匹配DIV里的内容,就需要点号匹配
1)抓取title的内容 <title>.*</title>
#####正则表达式匹配规则
字符组
[] 匹配单个字符
1)c[aou]t 匹配cat ,cot ,cut 然而不匹配caout
######转义
- 在php中使用
表示转义,比如查找"*","?" 就出现问题,应该使用"*"或者"?"
######反义
- 查找的字符不属于某个字符类,或者表达式和一直定义相反,这时需要反义
1)不包含空白符的字符串:S+
2)用尖括号括起来,以a开头的字符串:<a[^>]+>
######分支
- 分支就是存在多种可能的匹配情况,
[] 只能匹配单个字符,对于多个字符此时既可用分支
(c|h|a|to)at 可以代表"cat","hat","aat","toat"
1)匹配前三位或者前四位区号的电话号码
0d{2}-d{8}|0d{3}-d{7}
匹配带括号的电话区号
(0d{2})[-]?d{8}|0d{2}[-]?d{8}
#######分组 重复多个字符,可以用小括号指定子表达式,然后规定这个子表达式的重复次数
1)简单IP地址匹配
(d{1,3}.){3}d{1,3}
分析:匹配三位数字加上一个英文句号(重复三次):(d{1,3}.){3}
2)匹配IP地址
((2[0-4]d|25[0-5]|[01]?dd?).)(3)(2[0-4]d|25[0-5]|[01]?dd?)
######反向引用
反响引用用于重复搜索前面某个分组匹配的文本
b(w+)bs+1b
以上表达式可以匹配重复的单词,既b(w+)b 会被捕获到编号1的分组中
#####环视 顺序肯定环视(?=exp):
(?=exp) 匹配exp之前的值
逆序肯定环视(?<=exp):
(?<=exp) 匹配exp之后的值
顺序否定环视
1)匹配3位数字,而且这3位数字的后面不能是数字
d(3)(?!d)
逆序否定环视
(?<!exp) 匹配前面不是exp的位置
1)前面不是小写字母的7位数字
(?<![a-z])d{7}
#####贪婪/懒惰模式
需要匹配尽可能少的字符,也就是懒惰匹配
*? 重复任意次,但尽可能少重复
正则表达式的常用模式
- 忽略大小写模式(i)
- 多行模式(m)
- 点号通配模式(s):使正则表达式的点号元字符可以匹配换行符
- 懒惰模式(u):"u"相当于"?"表示懒惰匹配
常用的正则表达式
- 手机号正则:
(13[4-9]|15[01789]|18[239])d{8}
- 匹配email正则:
w{3,16}@w{1,64}.w{2,5}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|