<?php
$partent="/Wil{1}/i";
$string="wil";
if(preg_match($partent,$string,$arr)){
        echo "正则表达式<b>$partent</b>和字符串{$string}匹配成功<br>";
        echo "<pre>";
print_r($arr);
}else{
    echo "匹配不成功!";}
?>
   最近在学习正则,如上的代码,定界符中的{1}不是匹配其前的原子l一次么?可是我变换$string的值为wil、will、willl都匹配成功呢??而当{1}后面加上其他的原子之后,比如说写成/wil{1}pb/后,则willpb,willllpb就和/wil{1}pb/不匹配了~
   另外,我测试的元字符+、?、*,好像也是这样的~
      不懂,是不是里面有什么其他的规则我没注意呢~大家帮一下啦~

解决方案 »

  1.   

    在一个子表达式后加{1},在语法正确的情况下,这全完是画蛇添足,如a{1},就等价于a正则表达式:a
    源字符串:a
    匹配是否会成功?结论是肯定的,匹配的结果就是源字符串的全体“a”正则表达式:a
    源字符串:ab
    匹配是否会成功?结论同样是肯定的,匹配的结果是源字符串中的一部分,也就是字符“a”正则表达式:ac
    源字符串:ab
    匹配是否会成功?结论是匹配失败,原因就不用解释了吧
    同样的,你用wilpb去匹栩willpb当然不会成功
      

  2.   

    wil{1}pb
    这只能匹配wilpb
    preg_match这只要匹配到1个,就会给个true
      

  3.   

     最近在学习正则,如上的代码,定界符中的{1}不是匹配其前的原子l一次么?可是我变换$string的值为wil、will、willl都匹配成功呢
    你咋定义的匹配成功?正则匹配,在willl中匹配出指定格式的串wil就叫成功
    ps:wil{1}怎么不是匹配一次了?你没看打印的$arr值是wil吗?明显只匹配了一次