为什么取的不是11 而是 11 <a> 22呢? $a = '<a> 22  <a>  11  </a>';  preg_match_all('/<a>(.+?(?!<a>))<\/a>/is',$a,$b); print_r($b);

解决方案 »

  1.   

     preg_match_all('/<a>[\s]*([\s\w]*)<\/a>/i',$a,$b);
     print_r($b);
      

  2.   

    输出结果是:Array ( [0] => Array ( [0] =>  22  11  ) [1] => Array ( [0] => 22  11 ) )(?!<a>)表示后面不跟随<a>,因为里面有两对(),所以输出两个结果。22和<a>之间有空格,所以22也是满足条件。
      

  3.   

    preg_match('/<a>((?:.(?<!<a>))*)<\/a>/sm', $a, $arr); 
    print_r($arr);
      

  4.   


    谢谢高手
    1楼的方法也可以,虽然不完美 所以也给了点分
    还有点不明白的 .*(?!<a>) 和 (.(?!<a>))* 的区别
    另外 . 也能匹配空格吧