echo $keyword = "上海|北京!成都 深圳";
echo "<br />"; 
$old1 = array("/(\s*)(\s)(\s*)/","/(\s*)(\|)(\s*)/","/(\s*)(!)(\s*)/");
$new1 = array('" "','"|"','" "!');
echo $keyword3="\"".preg_replace($old1,$new1,$keyword)."\"";
//输出:"上海"|"北京" "!成都" "深圳"echo $keyword = "上海 | 北京 !成都   深圳";
echo "<br />"; 
$old1 = array("/(\s*)(\s)(\s*)/","/(\s*)(\|)(\s*)/","/(\s*)(!)(\s*)/");
$new1 = array('" "','"|"','" "!');
echo $keyword3="\"".preg_replace($old1,$new1,$keyword)."\"";
//输出:"上海" ""|"" "北京" "" "!成都" "深圳"上面两种情况:第一种是显示是对的,第二种给各符号间加了空格输去就错误了。请问多余的空格怎么屏蔽掉?正则表达式

解决方案 »

  1.   

    下面的做法能满足你的需要吗?
    echo $keyword = "上海|北京!成都 深圳";
    echo "<br />"; 
    $old1 = array("/(\s*)(\s)(\s*)/","/(\s*)(\|)(\s*)/","/(\s*)(!)(\s*)/");
    $new1 = array('" "','"|"','" "!');
    echo $keyword3="\"".preg_replace($old1,$new1,$keyword)."\"";
    //输出:"上海"|"北京" "!成都" "深圳"echo $keyword = "上海 | 北京 !成都   深圳";
    $keyword = str_replace(" ","",$keyword);
    echo "<br />"; 
    $old1 = array("/(\s*)(\s)(\s*)/","/(\s*)(\|)(\s*)/","/(\s*)(!)(\s*)/");
    $new1 = array('" "','"|"','" "!');
    echo $keyword3="\"".preg_replace($old1,$new1,$keyword)."\"";
    //输出:"上海" ""|"" "北京" "" "!成都" "深圳"
      

  2.   

    这样写$keyword = "上海|北京!成都 深圳";     //输出:"上海"|"北京" "!成都" "深圳"
    $keyword = "上海 | 北京 !成都   深圳";//输出:"上海"|"北京" "!成都" "深圳"
    echo "<br />"; 
    $old1 = array("/!?[^\s!|]+/", "/\s+/", "/\s*\|\s*/", '/""/');
    $new1 = array('"$0"', ' ', '|', '" "');
    echo $keyword3 = preg_replace($old1,$new1,$keyword);
      

  3.   

    参考一下
    $old1 = array("/(\s*)(\|)(\s*)/","/(\s*)(!)(\s*)/","/(\s*)(\s)(\s*)(?!\")/");
    $new1 = array('"|"','" "!','" "');
      

  4.   

    echo $keyword = "上海 | 北京 !成都   深圳";
    $keyword = str_replace(" ","",$keyword);
    echo "<br />"; 
    $old1 = array("/(\s*)(\|)(\s*)/","/(\s*)(!)(\s*)/","/(\s*?)(\s)(\s*?)/");
    $new1 = array('"|"','" "!','" "');
    echo $keyword3="\"".preg_replace($old1,$new1,$keyword)."\"";
    //输出:"上海" ""|"" "北京" "" "!成都" "深圳"
    试试