PHP 中有两套正则库;PCRE和POSIX;PHP5.3以后不在提倡用POSIX 然而POSIX字眼却也是经常看见的,比如在一些Linux工具书中;
正则的组成:一般而言包括,分隔符,表达式,修饰符;
元字符:表达式中具有特殊记忆的字符;就像我们Java中的class这样的字眼;
. 匹配出换行符外任意字符
w 匹配字母或者数字或者下划线或者汉字
s 匹配任意空白字符
d 匹配数字
匹配单词的开始或者结束
^ 匹配字符串的开始
$ 匹配字符串的结束
- 表示范围 比如 [a-z]
[] 表示括号中任意一个字符 分组符
* + ? 量词 * 表示重复0次或者更多次 +表示重复一次或者更多次 ?表示重复0次或者1次 另外{} {7}表示重复7次 {7,}重复7次以上 {7,10}表示重复6次以上11次以下
一些表达式帮助理解
cw* 表示开头的字符 不如canada candu c_ds_ds
d+ 表示可以正负无穷的数子
w{8} 表示长度为8的单词
0dd - ddddddd 表示类似 030 - 0392393 这样 等价于 0d{2} - d{7}
转义:去掉齐被赋予的含义,看成普通字符;用 比如* * 另外Q E 之间的任意元字符都会当成普通字符看待
另外字符组中所有表示非单个的元字符都会看成普通字符,因为字符组匹配单个;
反义:取反;
w 反义为W d D s S B [^x] 处x 意外任意字符
分支:()分支就是在分组的单个层面上扩展为了多个;例如(a|vn|cnm)at 匹配aat vmat cnmat
反向引用:重复搜索匹配,某个分组匹配的文本;如果未给分组命名的情况下,按照从左至右的顺序依次编号为1 2 3 4..... 也可以命名例如(?<same>w+)s + k<same> 这样可以匹配go go pity pity 这样的
环视:四种模式 顺序肯定环视(?=exp);逆序肯定环视(?<=exp);顺序否定环视(?!exp),逆序否定环视(?<!exp);
abcdefg .*(? <=abc) 将匹配defg
逆序是查看自身位置的前面 顺序是自身位置后面 后面表现在位置左边 前面表现为位置右边
贪婪/懒惰匹配模式:一个是尽可能多的匹配一个是尽可能少的匹配 比如、a .* b 如果匹配abcbcb 会整个匹配abcbcb 这就是贪婪 如果a.*? b 就是懒惰模式了