断言
格式
| 1 | 正向预查:(?=) 相对应的 (?!)表示否定意思 | 
| 1 | $regex = '/(?<=c)d(?=e)/'; /* d 前面紧跟c, d 后面紧跟e*/ | 
结果:
| 1 | array (size=1) | 
否定意义:
| 1 | $regex = '/(?<!c)d(?!e)/'; /* d 前面不紧跟c, d 后面不紧跟e*/ | 
字符宽度
| 1 | 
 | 
找不到字符串!;
| 1 | $regex = '/HE(?=L)LLO/i'; | 
(?=L)意思是HE后面紧跟一个L字符。但是(?=L)本身不占字符,要与(L)区分,(L)本身占一个字符。
捕获数据
没有指明类型而进行的分组,将会被获取,供以后使用。
指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。
在同一个表达式内的引用叫做反向引用。
调用格式: \编号(如\1)。
| 1 | $regex = '/^(today)[\w\s!]+\1$/'; | 
不捕获分组
   格式:   (?:pattern)  #不捕获分组  比较(X)和(?:X)前者是捕获分组,后者不捕获
   优点:将使有效反向引用数量保持在最小,代码更加、清楚。
| 1 | $regex = '/(?:a)(b)(c)/'; | 
命名捕获分组
格式:(?P<组名>) 调用方式 (?P=组名)
| 1 | $regex = '/(?P<name>sui)[\s]Is[\s](?P=name)/i'; | 
惰性匹配
格式:限定符?
原理:"?":如果前面有限定符,会使用最小的数据。如“*”会取0个,而“+”会取1个,如过是{3,5}会取3个。
| 1 | $regex = '/heL*/i'; | 
结果:
| 1 | array (size=1) | 
| 1 | $regex = '/heL*?/i'; | 
结果:
| 1 | array (size=1) | 
?前面有限定符*
使用{3,5}
| 1 | $regex = '/heL{3,5}?/i'; | 
结果:
| 1 | array (size=1) | 
正则表达式中 . 与 (.?) 的区别
简单说是贪婪匹配与非贪婪匹配的区别。
比如说匹配输入串A: 101000000000100
使用 1.*1 将会匹配到1010000000001, 匹配方法: 先匹配至输入串A的最后, 然后向前匹配, 直到可以匹配到1, 称之为贪婪匹配。
使用 1.?1 将会匹配到101, 匹配方法: 匹配下一个1之前的所有字符, 称之为非贪婪匹配。
所有带有量词的都是非贪婪匹配: .*?, .+?, .{2,6}? 甚至 .??
 
          