正则表达式高级查找:环视和逆序环视

2015年06月23日 11:56 by:网络收集
正则表达式是很“牛掰”,正则表达式的环视:
  • (?<=exp)肯定逆序环视 零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
  • (?<!exp),否定逆序环视 零宽度负回顾后发断言来断言,此位置的前面不能匹配表达式exp:(?<![a-z])d{7}匹配前面不是小写字母的七位数字
  • (?=exp)肯定正序环视 也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
  • (?!exp),否定正序环视 零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp
如果想匹配一个字符串‘1,123,5’中是否含有1,这个1可能出现在开头,也可能出现在中间,也可能出现在末尾,也可能这个字符串就有一个1,当然类似‘111,12’中也含有1,但是这不是我们想要的。这时我们就用到了正则里面的环视,简单的说,就是1前面是非数字,1后面也是非数字。下面来看实现:
  1. <?php
  2. $a = '123,222,1';
  3. if(preg_match('/(?<!d)1(?!d)/',$a,$c)){
  4.     echo '<pre>';
  5.     print_r ($c);
  6.     echo '</pre>';
  7.     echo '有';
  8. }else{
  9.     echo '没有';
  10. }
  11. ?>
输出:
Array ( [0] => 1 )
标签:正则 环视