Подтвердить что ты не робот

Снять конкретные слова из строки

Я хочу вырезать целые слова из строки, где бы они ни находились внутри строки.

Я создал массив запрещенных слов:

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

Теперь я разбиваю слова:

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

Проблема заключается в том, что приведенный выше код также разделяет слова, содержащие запрещенные слова, такие как "песок" или "больше".

4b9b3361

Ответ 1

Для этого вы можете использовать preg_replace и границы слов:

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

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

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

EDIT: Пример.

Ответ 2

str_replace также поддерживает ввод массива. Это означает, что вы можете использовать его следующим образом:

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

Это означает, что все слова, существующие в массиве, будут заменены пустой строкой. Если вам нужны конкретные замены, вы также можете создать массив замен.

Чтобы удалить правильные слова в настройках, я бы посоветовал добавлять пробелы вокруг "или" и "where". Поскольку вы только удаляете реальные слова, а не части слов.

Надеюсь, это поможет.

Ответ 3

TRY:

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

Ответ 4

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

я использовал его для этого и отлично работает

но вместо этих слов будут добавлены пробелы, поэтому вам нужно будет снова заменить на chk двойные пробелы и удалить их

Ответ 5

Если вы используете символы utf-8, вам нужно добавить /u к выражению регулярного выражения

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

Без /u он удалит "o" из "regadío" → "regadí"