function removeBracket($str) {
if(!$str) return;
$str = preg_replace("/(\(|()([^\)\(]+)计划(\)|))/",'',$str);
//$str = preg_replace("/(\(|()([^\)\(()]+)计划(\)|))/",'',$str);
return $str;
}$str = '中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)';
//$str = '中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)';
var_dump(removeBracket($str)); //结果应 return '中集冀东(秦皇岛)车辆制造有限公司'
上边的函数removeBracket() 我想让他替换一个字符串. 替换规则是:如果字符串中出现小括号(可能为中文或英文状态下的),并且右括号前为"计划"两个字, 则去掉该括号以及括号中的内容, 其他括号保留, 如:'中集冀东(秦皇岛)车辆制造有限公司(承德庞大计划)'经过转换应为'中集冀东(秦皇岛)车辆制造有限公司', 但是现在转换结果为:'中集冀东'. 英文的情况搞定了, 请大家帮忙, 主要是中间这段: ([^\)\(]+) 为什么不可以写成([^\)\(()]+)
正则表达式对 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 编码的数据
谢谢, 还是没有解决, 我们网站程序和数据库全都是UTF-8的, 然后正则表达式后加上"u"还是不行, 谢谢你, 能再帮我看看吗?
<?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 '中集冀东(秦皇岛)车辆制造有限公司'
?>
mb_regex_encoding("GBK");
if(!$str) return;
$str = preg_replace("/[((]([^)(()]+)计划[))]/u", '', $str);
return $str;
}
是的, 我的程序文件编码是UTF8的.