求一正则
匹配      [.*] 或者 
          [[.*]或者
          [.*]] 
但不匹配   [[.*]]  
也不匹配  [[[.*]]  [[[.*]]]  就是两种中括号以上

解决方案 »

  1.   

    把.*换成字母容易测试 $str = '[a]sdf[[b] e [cc]]] xxxe[[[dd] er[[ee]] ere[[[ff]] s[[xxxx]]]df [h] [iii]]';preg_match_all("/(?<!\[)\[[a-z]+\](?!\])|(?<!\[)\[\[([a-z]+)\](?!\])|(?<!\[)\[[a-z]+\]\](?!\])/i",$str,$m);
    print_r($m[0]);
      

  2.   

    $s = '求一正则 
    匹配      [dfgd1] 或者 
              [[fghfh2]或者 
              [hjjk3]] 
    但不匹配  [[sdf44]]  
    也不匹配  [[[rtyrt55]]  [[[jythj66]]]  就是两种中括号以上';
    $p = "/((?<!\[)\[[^[\]]+]*|\[*[^[\]]+](?!]))/i";
    preg_match_all($p,$s,$r);
    var_dump($r);
      

  3.   

    <?php
    $str = '[a]sdf[[b] e [cc]]] xxxe[[[dd] er[[ee]] ere[[[ff]] s[[xxxx]]]df [h] [iii]]';
    $reg= '/(\[)[^\[\]]*(?(1)\]{1,2})|(\[\[)[^\[\]]*(?(2)\])/';
    preg_match_all($reg,$str,$arr);
    print_r($arr[0]);
    ?>