PHP正则表达式中的贪婪与非贪婪

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更有效。

tag:正则表达式贪婪与非电脑软件php

相关内容