function removeBracket($str) {
    if(!$str) return;
    $str = preg_replace("/(\(|()([^\)\(]+)计划(\)|))/",'',$str);
    //$str = preg_replace("/(\(|()([^\)\(()]+)计划(\)|))/",'',$str);
    return $str;
}$str = '中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)';
//$str = '中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)';
var_dump(removeBracket($str));    //结果应 return '中集冀东(秦皇岛)车辆制造有限公司'
上边的函数removeBracket() 我想让他替换一个字符串. 替换规则是:如果字符串中出现小括号(可能为中文或英文状态下的),并且右括号前为"计划"两个字, 则去掉该括号以及括号中的内容, 其他括号保留, 如:'中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)'经过转换应为'中集冀东(秦皇岛)车辆制造有限公司', 但是现在转换结果为:'中集冀东'. 英文的情况搞定了, 请大家帮忙, 主要是中间这段: ([^\)\(]+) 为什么不可以写成([^\)\(()]+)

解决方案 »

  1.   

    你的页面是 gbk 的。
    正则表达式对 gbk 中文表现的不大友好
    你可以这样做
    function removeBracket($str) {
        if(!$str) return;
        $str = iconv('gbk', 'utf-8', $str);
        $p  = iconv('gbk', 'utf-8', "/[((]([^)(()]+)计划[))]/u");
        $str = preg_replace($p,'',$str);
        return iconv('utf-8', 'gbk', $str);
    }$str = '中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)';
    var_dump(removeBracket($str));    //结果应 return '中集冀东(秦皇岛)车辆制造有限公司'
    $str = '中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)';
    var_dump(removeBracket($str));    //结果应 return '中集冀东(秦皇岛)车辆制造有限公司'即在函数里做一下编码转换。注意正则表达式中的附加属性 u ,他表示处理的是 utf-8 编码的数据
      

  2.   


    谢谢, 还是没有解决, 我们网站程序和数据库全都是UTF-8的, 然后正则表达式后加上"u"还是不行, 谢谢你, 能再帮我看看吗? 
      

  3.   

    需要用mb_ereg_replace
    <?php
    function removeBracket($str) {
    if(!$str) return;
    mb_regex_encoding("UTF-8");
    $newstr = mb_ereg_replace("[((]([^\))]+)计划[\))]",'',$str);
    return $newstr;
    }$str = '中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)';
    var_dump(removeBracket($str));    //结果应 return '中集冀东(秦皇岛)车辆制造有限公司'
    ?>
      

  4.   

    如果你的文件是GBK编码的,修改这句
    mb_regex_encoding("GBK");
      

  5.   

    用你的程序测试了一下, 结果还是不对, 跟PHP配置有关系吗?
      

  6.   

    我用的是UTF-8编码,你的也是吗?如果不是,你需要修改mb_regex_encoding("your encoding");
      

  7.   

    如果你确认你的程序是 utf-8 编码的,这样写就行了function removeBracket($str) {
        if(!$str) return;
        $str = preg_replace("/[((]([^)(()]+)计划[))]/u", '', $str);
        return $str;
    }
      

  8.   


    是的, 我的程序文件编码是UTF8的.