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 中删除单个字符,如果它是单独的?

4

3 回答 3

2

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

/b应该寻找单词边界以确保在使用一个字符时它是一个孤立的单词。

编辑:没有完全正确地阅读 - 这更多的是假设您将 $wordstodelete 作为单词数组进行循环。

所以,像这样:

$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 中渲染时通常不会出现问题(因为通常不会渲染连续的空格),但取出它仍然是个好主意。这也会在前面创建一个正则表达式数组,看起来更好一些。

于 2012-07-21T12:54:01.283 回答
0

您可以使用 preg_replace 仅替换“单独的单词”,如下所示:(我正在生成正则表达式,因此单词列表可以保持不变)

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

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

$oneBigDescription = preg_replace($regexs, '\1', $oneBigDescription);
于 2012-07-21T12:56:00.317 回答
0

听起来您可能需要使用一些正则表达式

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

这将采用“黑色中央”并返回“黑色中央”

于 2012-07-21T12:53:13.603 回答