从字符串中删除特定单词

时间:2012-02-18 14:43:50

标签: php

我想从字符串中的任何字符串中删除整个单词。

我创建了一系列禁词:

$wordlist = array("or", "and", "where", ...)

现在我删除了这些词:

foreach($wordlist as $word)
$string = str_replace($word, "", $string);

问题是上面的代码还会删除包含“sand”或“more”等禁用词的单词。

6 个答案:

答案 0 :(得分:21)

为此,您可以使用preg_replace和字边界:

$wordlist = array("or", "and", "where");

foreach ($wordlist as &$word) {
    $word = '/\b' . preg_quote($word, '/') . '\b/';
}

$string = preg_replace($wordlist, '', $string);

编辑Example

答案 1 :(得分:7)

str_replace还支持数组的输入。这意味着您可以通过以下方式使用它:

str_replace(array("word1", "word2"), "", $string);

这意味着数组中存在的所有单词都将被空字符串替换。如果您想要特定的替换,您也可以创建一个替换数组。

要删除设置中的正确单词,我建议在“或”和“where”周围添加空格。因为你只会删除真实的单词,而不是单词的一部分。

我希望这会有所帮助。

答案 2 :(得分:1)

TRY:

 $string = preg_replace("\b$word\b", "", $string);

答案 3 :(得分:0)

$areaname = str_replace(array("to", "the","a","an","in","by","but","are","is","had","have","has"),'',$areaname);

我用它来做这件事并且工作正常

但是它会添加空格来代替这些单词,所以你需要再次使用replace来chk double空格并删除它们

答案 4 :(得分:0)

如果您使用的是utf-8字符,则需要在正则表达式中添加/ u

$string = "regadío";
$omit = ["a", "y", "o"];
$string = preg_replace('/\b(' . implode('|', $omit) . ')\b/u', '', $string);

没有/ u,它将从“regadío”->“regadí”中删除“ o”

答案 5 :(得分:0)

我遇到了同样的问题,并像这样修复了它:

$filterWords = ['a','the','for'];
$searchQuery = 'a lovely day';
$queryArray = explode(' ', $searchQuery);
$filteredQuery = array_diff($queryArray, $filterWords);

$filteredQuery 将包含 ['lovely','day']

相关问题