$t = 'C,D,E,F,G,A,B,O,X,Y,Z';
$r = ' BOLD ';// 怎么把 $t 中的B与D与O换成 $r ?
// 即是: C, BOLD ,E,F,G,A, BOLD , BOLD ,X,Y,Z
// 有啥好方法?

解决方案 »

  1.   

    echo preg_replace('/[B|D|O]/',$r,$t);
      

  2.   

    echo str_replace(array('B','D','O'), $r, $t);
      

  3.   

    $t = 'C,D,E,F,G,A,B,O,X,Y,Z';// 怎么把 $t 中的B与D与O换成 <b ="BOLD">?</b> 
    // 即是: C, <b ="BOLD">D</b> ,E,F,G,A, <b ="BOLD">B</b> , <b ="BOLD">O</b> ,X,Y,Z像这样的吧。
      

  4.   


    $t = 'C,D,E,F,G,A,B,O,X,Y,Z';
    $r = ' BOLD';$temp=explode(",",$t);
    foreach ($temp as $k=>$v)
    {
    if(in_array($v,array("B","D","O")))
    {
    $temp[$k]=$r;
    }
    }
    print_r(join(",",$temp));
      

  5.   

    这位这方法有点版啊。
    这C,D,E,F,G,A,B,O,X,Y,Z不一定是,号分隔着的。
    可能一大串没规律的字符。
      

  6.   

    用一楼的方法就可以了。
    echo preg_replace('/[B|D|O]/','<b ="BOLD">$0</b>',$t);
      

  7.   

    楼上各位。B|D|O 有中文或是其它字符会不行了。
    怎么写正则不太会了。
      

  8.   

    你可以用正则替换<b>标签中的内容...$str = <<<HTML
    C, <b ="BOLD">D</b> ,E,F,G,A, <b ="BOLD">B</b> , <b ="BOLD">O</b> ,X,Y,Z
    HTML;
    $r = 'BOLD';
    echo preg_replace('/(<b *= *"BOLD">)\w+(<\/b>)/isU', "$1$r$2", $str);
      

  9.   


    $html = <<<HTML
    C,D,E,F,G,A,B,O,X,Y,Z,d,ssdd,b,sdsss,o,sdfs,o
    HTML;$keyword = '[B|D|O]';
    $pat = sprintf('/(.*?%s.*?)/is',$keyword);$t = preg_replace_callback($pat, 'foo', $html);
    function foo($matches){
        global $keyword;
        array_shift($matches);
        $t = array_splice($matches, 1,1);
        $ret = preg_replace("/($keyword)/i", "<a href='#'>$1</a>", $matches);
        array_splice($ret, 1,0,$t);
        return implode('', $ret);
    }
    echo $t;
      

  10.   

    谢谢楼上各位写的各种马。问题是这样的。就像百度搜索的结果一样。会把你搜索关键了加红显示。
    所以没有什么要固定的替换字符答啊。可能是中文英文符号等.........我现在替换就有点点问题。
    就是替换后的字符又有查找的字符的话就有问题了。
    比如
    查找: 中国emBBBb中国美国em英国得替换成:
    BBBb<em>中国</em>美国<em>em</em>英国弄不了的话。我结贴算了。做个判断em就不加红了。
      

  11.   


    $html = <<<HTML
    BBBb中国美国em英国
    HTML;$keyword = '中国|em';
    $pat = sprintf('/(.*?%s.*?)/uis',$keyword);$t = preg_replace_callback($pat, 'foo', $html);
    function foo($matches){
        global $keyword;
        array_shift($matches);
        $t = array_splice($matches, 1,1);
        $ret = preg_replace("/($keyword)/ui", "<em>$1</em>", $matches);
        array_splice($ret, 1,0,$t);
        return implode('', $ret);
    }
    echo $t;
    /**
    BBBb<em>中国</em>美国<em>em</em>英国
    */满足不了你?
      

  12.   

    $html = <<<HTML
    BBeBb中国美国em英国
    HTML;$ret = preg_replace("/(中国|em)/ui", "<em>$1</em>", $html);
    echo $ret;怎么不直接这样...我不知道你foo里面有啥用意啊。
    看来得补补了。正则学了忘学了又忘........
      

  13.   

    把串改成
    $html = <<<HTML
    BBBbem<a href="http://www.lem.com/a/em/">em</a><div class='em'><a href='特价信息.中国'>中国特价信息</a></div>
    HTML;
    看清楚里面那几个em,还有'中国'。然后再来思考是不是需要正则的问题。