例子: 我们的祖国是花园,花园的花朵真鲜艳,祖国啊,祖国 -]-什么祖国啊-[- 将上面的祖国替换成 国家  但是前后有-]-和-[-的就别替换了  结果: 我们的国家是花园,国家的花朵真鲜艳,国家啊,国家 -]-什么祖国啊-[- 
请问怎么用正则表达式,排除掉前后包含-]-和-[-的

解决方案 »

  1.   

    <?php
    $str="我们的祖国是花园,花园的花朵真鲜艳,祖国啊,祖国 -]-什么祖国啊-[-";
    global $r,$s,$i;
    $r=$s=array();
    $i=0;
    function r($str){
        global $r,$s,$i;
        $i++;
        $search="-]-$i-[-";
        $s[$i]=$search;
        $r[$i]=$str;
        return $search;
    }
    $str=preg_replace('/(-\]-.+?-\[-)/e',"r('\\1')",$str);
    $str=str_replace("祖国",'国家',$str);
    $str=str_replace($s,$r,$str);
    var_dump($str);
    ?>
      

  2.   

    <?php
    $str = '我们的祖国是花园,花园的花朵真鲜艳,祖国啊,祖国 -]-什么祖国啊-[- ';
    $str = preg_replace('/(-]-.*)(祖国)(.*-\[-)/u','\1祖@@国\3',$str);
    $str = str_replace('祖国','国家',$str);
    $str = str_replace('祖@@国','祖国',$str);
    print_r($str); 
    ?>