假设把 /(.*)/ 理解为(匹配条件1:匹配一个空串)“或”(匹配条件2:无限个字符.)组成的字符串,那倒是可以理解。既然是“或”的关系,那么如果两种匹配条件都匹配到结果,就都返回。有道理吗?

解决方案 »

  1.   

    .*的意思是匹配任意字符串。
      

  2.   

    空串  也算任意字符串?
      

  3.   

    .* 匹配一个长度为0-n的任意非\n字符组成的串空串的长度为0,当然也在其中你用preg_match就不会有了。你的这个正则表达式只能作为边界条件测试,并无实际价值。在实际编程中并不会这样写的。
    当然在preg_match_all中出现的这个问题,应该是一个bug。既然.*可以匹配空串,那么这个空串应该附加在前面非空字符之后,而非另为一组