PHP正则表达式中的贪婪与非贪婪
所谓贪婪,比如说,一到两个从一条面包面包到吃面包,你只能吃面包,但是你贪婪,所以先把两个面包放在里面,你要吃,而不是贪婪,你什么都不吃,只吃一个面包。
让我们看看规范是贪婪的。
< PHP
面包=面包两个;
preg_match( / /(。*);
print_r(合物);
结果uff1a
阵列
(
{ 0面包面包
{ 1面包面包
)
0个记录是整个字符,1个是第一个匹配。
你如何限制贪婪
< PHP
面包=面包两个;
preg_match( / /(。*);
print_r(合物);
阵列
(
{ 0 }面包
{ 1 }面包
)
用一个特殊的符号来修改匹配的数量,添加一个 ,这可以使不确定匹配的表达式尽可能小。
在PHP中,它也可以通过修饰符实现。
< PHP
面包=面包两个;
preg_match( /(。*);
print_r(合物);
结果和上面的一样,这是修饰符u的作用。
两。预搜索
预搜索是一种非访问匹配,不存储以供将来使用。
1。正向搜索(= xxxxx)
(= xxxxx):右侧的空当,你必须能够匹配的xxxxx部分的表达。
< PHP
$str = 'windows NT、Windows 2003、Windows XP的;
preg_match( /窗口(= XP),$str,$ RES);
print_r(合物);
结果uff1a
阵列
(
{ Windows 0
)
这是XP前面的窗口,它不接受NT和2003前面。
格式:!xxxxx)
< PHP
$str = 'windows NT、Windows 2003、Windows XP的;
preg_match_all( / Windows(XP!),$ STR,$ RES);
print_r(合物);
结果uff1a
阵列
(
{ 0 }数组
(
{ 0 } Windows。
{ 1 }窗口>这是前面的2003个
)
)
正如您从这里看到的,预搜索不存储以供以后使用。
与参与者的存储相比。
< PHP
$str = 'windows NT、Windows 2003、Windows XP的;
preg_match_all( / Windows(XP } { ^),$str,$ RES);
print_r(合物);
结果uff1a
阵列
(
数组,{ 0 } =数组所有模型
(
{ 0 } Windows n
{ Windows 2 1
)
一组字符串匹配{ 1 }数组子模式组合,由存储构成。
(
{ 0 } > n
{ 1 } = 2
)
)
2。反向预搜索(<= xxxxx)
(< = xxxxx)缺口的左侧可以匹配xxxxx部分。
< PHP
$str = '1234567890123456;
(preg_match /(<= D { 4 }) D +(= D { 4 }),$str,$ RES);
print_r(合物);
结果uff1a
阵列
(
{ 0 } = 56789012
)
匹配前4个数和下4个数以外的中间8个数。
(< <!Xxxxx): the left side of the gap does not match the XXXX part.
< PHP
$ =我1234567890123456;
preg_match( /(<!i、$、$、$;
print_r(合物);
结果uff1a
阵列
(
{ 0 } = 234567890123456
)
之间的区别三,妊娠和ereg
PHP也使用两套正则表达式,由电气和电子工程师协会(IEEE)开发了一套由POSIX扩展1003.2兼容的正则(事实上这一标准的PHP支持的不完善),另一组由PCRE(Perl兼容正则表达式)库提供Perl兼容正则。PHP5.3开始删除POSIX。
preg_match比ereg更有效。