+ -
当前位置:首页 → 问答吧 → 问个简单的问题吧

问个简单的问题吧

时间:2011-10-25

来源:互联网




PHP code


$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


// 有啥好方法?



作者: ci1699   发布时间: 2011-10-25

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

作者: heyli   发布时间: 2011-10-25

非正则的话。有路子走么。

引用 1 楼 heyli 的回复:

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

作者: ci1699   发布时间: 2011-10-25

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

作者: yangball   发布时间: 2011-10-25

$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

像这样的吧。

作者: ci1699   发布时间: 2011-10-25

这个是不行嘀

引用 3 楼 yangball 的回复:

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

作者: ci1699   发布时间: 2011-10-25

PHP code

$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));

作者: TottyAndBaty   发布时间: 2011-10-25

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

引用 6 楼 tottyandbaty 的回复:

PHP code

$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(","……

作者: ci1699   发布时间: 2011-10-25

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

作者: jordan102   发布时间: 2011-10-25

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

正则不太会了。

作者: ci1699   发布时间: 2011-10-25

不懂你的意思
难道你要替换的不止这三个?

作者: jordan102   发布时间: 2011-10-25

作者: ZT_King   发布时间: 2011-10-25

你可以用正则替换<b>标签中的内容...

PHP code
$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);

作者: ohmygirl   发布时间: 2011-10-25

PHP code

$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;

作者: ZT_King   发布时间: 2011-10-25

谢谢楼上各位写的各种马。

问题是这样的。就像百度搜索的结果一样。会把你搜索关键了加红显示。
所以没有什么要固定的替换字符答啊。可能是中文英文符号等.........

我现在替换就有点点问题。
就是替换后的字符又有查找的字符的话就有问题了。


比如
查找: 中国em

BBBb中国美国em英国

得替换成:
BBBb<em>中国</em>美国<em>em</em>英国

弄不了的话。我结贴算了。做个判断em就不加红了。

作者: ci1699   发布时间: 2011-10-25

PHP code

$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>英国
*/


满足不了你?

作者: ZT_King   发布时间: 2011-10-25

相关阅读 更多