正则表达式:正向、反向预查
对正则表达式总是望而生畏,现趁有空,补补这块的知识,记录一下正向预查与反向预查: 1.正向预查现在,我们假设需要仅匹配 Windows,不匹配后面的版本号,并且要求 Windows 后面的版本号只能是 数字类型,换言之,XP 和 Vista 不能被匹配, Text: RegEx: Result:(带下划线的为成功匹配的) PHP代码如下: <?php $reg="#Windows(?=[d.]+b)#"; $str="Windows1.03andWindows2.0fisrtReleasedin1985and1987respectively. Windows95andWindows98arethesuccessor. ThenWindows2000andWindowsXpappeared. WindowsVistaistheLatestversionofthefamily."; if(preg_match_all($reg,$str,$match)){ //code... var_dump($match); }else{ //code... echo("errorcode"); } 结果: array(1){ [0]=> array(5){ [0]=> string(8)"Windows" [1]=> string(8)"Windows" [2]=> string(8)"Windows" [3]=> string(8)"Windows" [4]=> string(8)"Windows" } } 可以将 正向预查 理解成为自定义的边界(b),这个边界位于表达式末。 aaaaxaaaa x(?=[,.rn<>;-]) Result: 2.反向预查在上面的例子中,我们知道 正向预查 类似于自定义的 位于文本末 的字符边界。那么自然应该有位于文本首的情况,比如说,我们要匹配下面文本中属于 CNY 的金额: Text: RegEx: Result: USD: 22.5 USD: 23.5 HKD: 1533.5 CNY: 23.78 与上面类似,我们现在要求仅匹配金额,而不匹配前面的 “CNY:” <?php $reg="#(?<=CNY:)d+.d+#"; $str="CNY:128.04 USD:22.5 USD:23.5 HKD:1533.5 CNY:23.78"; if(preg_match_all($reg,$match)){ //code... var_dump($match); }else{ //code... echo("errorcode"); } 结果: array(1){ [0]=> array(2){ [0]=> string(6)"128.04" [1]=> string(5)"23.78" } }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |