2012-07-21 165 views
0

我遇到的问题是,如果我在数组$ wordstodelete中有单个字符,则它会从$ oneBigDescription中的单词中删除它们。删除字符串中的字符串

$oneBigDescription = str_replace ($wordstodelete, '', $oneBigDescription); 

所以使得它看起来是这样的:

array (size=51) 
    'blck' => int 5 
    'centrl' => int 6 
    'clssc' => int 6 
    'club' => int 10 
    'crs' => int 54 
    'deler' => int 7 
    'delers' => int 5 
    'engl' => int 6 
    'felne' => int 8 
    'gude' => int 5 
    'hot' => int 5 
    'jgur' => int 172 
    'jgurs' => int 5 
    'lke' => int 6 

有没有办法只删除从$ oneBigDescription单个字符,如果是自己的?

+3

我有很难理解你的请求。你能举一个例子来描述你的问题和你需要什么吗? – 2012-07-21 12:52:24

回答

2

$oneBigDescription = preg_replace("/\b$wordstodelete\b/", '', $oneBigDescription);

/b应该找字当使用一个字符时,确保它是一个单独的单词。

编辑:没有完全阅读正确的 - 这更假设你正在循环$ wordstoredlete作为一个单词数组。

所以,这样的事情:

$desc = "blah blah a b blah"; 
$wordstodelete = array("a", "b"); 
foreach($wordstodelete as $delete) 
{ 
    $desc= preg_replace("/\b$delete\b/", "", $desc); 
} 

EDIT2:没有与此很高兴,所以稍微细化:

$arr = "a delete aaa a b me b"; 
$wordstodelete = array("a", "b"); 
$regex = array(); 
foreach($wordstodelete as $word) 
{ 
    $regex[] = "/\b$word\b\s?/"; 
} 
$arr = preg_replace($regex, '', $arr); 

该账户取出下面的空间,在HTML中通常不是渲染时的问题(因为连续的空格通常不会被渲染),但仍然是一个好主意。这也创建了一系列的正则表达式,这似乎更好一些。

+0

谢谢你的工作! – flux 2012-07-21 13:04:39

0

这听起来像你可能需要使用一个小的正则表达式

$oneBigDescription = preg_replace('/\sa\s/', ' ', $oneBigDescription); 

这将需要“黑中心”,并返回“黑中心”

0

可以使用的preg_replace只能更换“的话对自己”像下面这样: (我生成的正则表达式字左右的列表可以保持不变)

$wordsToReplace = ("a", "foo", "bar", "baz"); 
$regexs = array(); 
foreach ($wordsToReplace as $word) { 

    $regexs[] = "/(\s?)". $word . "\s?/"; 
} 

$oneBigDescription = preg_replace($regexs, '\1', $oneBigDescription);