一、正则元素:
1、原子(在正则表达式中至少包含一个)
2、元字符(有特殊功能的符号,如^$等)
3、模式修正符(提供额外功能的符号,如U i等)
4、常用函数
二、原子:
1、a-z A-Z _ 0-9 常见字符
2、(bbc) (php) 用圆括号包括起来的单元符号,表示bbc是一个整体,php是一个整体
3、[bbc]用方括号括起来的,表示只要有一个b或者一个c就可以匹配成功
4、[^bbc],[^]表示排除或者相反的内容,表示除b和c外的匹配成功
5、转义字符,\d表示所有数字即[0-9],\B表示除所有字母外的元素即[^0-9],\w表示包含所有英文字母即[a-zA-Z],\s表示空白区域包含回车、换行、分页等即[\f\n\r]
三,php正则匹配
正则匹配是一个强大的文本处理工具,正则匹配不仅仅在php上有应用,几乎在所有语言中也是通用的,php正则表达式主要提供以下两种
1、perg_match:以perl为基础,匹配函数为perg_match(匹配模式, 需要匹配的文本, 存放结果的数组),perg_match中匹配模式以/开始和以/结束,或者是以#开始和结束,例子:
if(perg_match('/php/', 'abgdsabakphp', $arr)) {
echo '匹配成功,结果为:'.$arr[0];
} else {
echo '匹配不成功";
}
运行结果是:匹配成功,结果为:php
2、ereg:以posix为基础,函数和上述相同,匹配模式不用以/开始和结束,基本没有太多的差别,而且这个效率低一些,官方也不推荐使用,平时使用以上面为主
三、元字符
* 前一个内容出现零次、一次和多次,例如/0*/匹配成功10, 100, 1
. 可以代表任何的字符,不包含换行回车换页符,例如(.*)可以匹配任何个字符
+前一个内容出现一次或多次,跟*的区别是没有零次,/0?/匹配成功10,对1匹配不成功
? 前一个内容出现零次或者一次
| 跟php代码中的|类似,表示两边只要有一边匹配成功即匹配成功,把两边当成一个整体来对待,功能上相当于两边都加了圆括号,例如/aac|bbc/匹配成功xxxaacxx,或者xxxbbcxx
^ 出现在字符串首部才匹配成功,如^a匹配成功aaaa,匹配不成功baaa
$ 出现在字符串尾部才匹配成功,如a$匹配成功bbbba,匹配不成功aaaab
\b 匹配单词边界,/\bis\b/ This is xxx.匹配成功,空格is空格
\B 除单词边界外的内容
{m} 前一个内容出现m次,/a{2}/,相当于/aa/,匹配成功bbaabb,匹配不成功bbabb
{m,} 前一个内容出现m或者大于m次
{m,n} 前一个内容出现m到n次
() 合拼整体,放入内存,可以用\1\2\3来调用之前()中的内容,如/(a)b\1/可以匹配成功aba
四、运算顺序
从左到右,()最高,*#?+{}第二,^$\b边界运算符第三,|第四
五、模式修正符
使用,/aaa/修正符
i 不区分大小写,例如/[a-zA-Z]/作用等于/[a-z]/i
m 多行匹配
S 将转义回车取消
x 忽略正则中的空格,如/p p/x作用等于/pp/
A 强制从头开始匹配
P 强制匹配尾部
U 禁止贪婪匹配,只追踪到最近的一个匹配符结束
六、php常用正则函数
preg_match 上面有具体的介绍
preg_match_all
preg_replace 跟str_replace类似,不过以正则来代替匹配的需查找的字符
preg_split 跟explode类似,以正则来代替分隔符
七、正则学习比较困难,很多匹配的模式在网上也有,正则的效率要低于str函数,简单大量的优先考虑str函数,正则是非常强大的工具,特别是在进行数据采集和处理转换的时候