我想从字符串中的任何字符串中删除整个单词。
我创建了一系列禁词:
$wordlist = array("or", "and", "where", ...)
现在我删除了这些词:
foreach($wordlist as $word)
$string = str_replace($word, "", $string);
问题是上面的代码还会删除包含“sand”或“more”等禁用词的单词。
答案 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']