Верх страницы
Обложка к записи Удаление повторяющихся слов из текста
Время для прочтения: 0 мин. 23 сек.

Удаление повторяющихся слов из текста

Очень простое регулярное выражение для удаления дубликатов слов из текста.

Вариант 1

<?php
$str = 'Текст, содержащий дубликаты слов';
$str = preg_replace("#\s(\w+\s)\1#siu", "$1", $str);

echo $str;

Вариант 2

Основано на комменатриях пользователей и старом-добром форуме «Киберфорум».

<?php
/**
 * Удаляет дубликаты слов в переданной строке.
 *
 * @param string $text Исходная строка.
 * @return string Строка без дубликатов.
 */
function delete_duplicates_words( string $text ): string {
    $text = implode( array_reverse( preg_split( '//u', $text ) ) );
    $text = preg_replace( '/(\b[\pL0-9]++\b)(?=.*?\1)/siu', '', $text );
    $text = implode( array_reverse( preg_split( '//u', $text ) ) );
    $text = preg_replace( '#\s+#', ' ', $text );

    return $text;
}

$str = 'янтарь натуральный натуральный камень янтарь натуральный жемчуг';

echo delete_duplicates_words( $str );

// Выводит:
// янтарь натуральный камень жемчуг

RTFM

Автор: Кобзарёв Михаил

Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, Opencart, DLE, Laravel, Moonshine, SuiteCRM.

Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.

Веду блог о разработке, дайджест в телеграмме и в ВК.

Вы всегда можете нанять меня.

Комментарии
Подписаться
Уведомить о
guest

16 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
ggggggggggj
11 лет назад

Не вышло

Антон
Антон
6 лет назад
Ответить на  Кобзарёв Михаил

Не работает ваша конструкция

Михаил
Михаил
9 лет назад

$str = preg_replace(‘/(b[pL0-9]++b)(?=.*?1)/siu’, », $str); — у меня так выходит.

mihdan
9 лет назад
Ответить на  Михаил

Можно и так)

Марат Аминев
Марат Аминев
8 лет назад

Не подскажите, а как сделать для ссылок? Если есть повторяющиеся ссылки, то удаляет все повторяющиеся элементы, а слеши от ссылки оставляет…
Спасибо заранее!

Amsterdam
Amsterdam
5 лет назад

Простое и нерабочее. Хоть бы проверял

Рома
Рома
11 месяцев назад
Ответить на  Кобзарёв Михаил

Не корректно работает, еще и портит.
Из строки «янтарь натуральный натуральный камень янтарь натуральный жемчуг»
делает «янтарьнатуральный камень янтарь натуральный жемчуг»
PHP 8.2 UTF-8, mb_string всё есть.

Рома
Рома
11 месяцев назад
Ответить на  Кобзарёв Михаил

Спасибо!

Рома
Рома
11 месяцев назад
Ответить на  Кобзарёв Михаил

хотя, если уж вы начали использовать массивы, то вот такой вариант имхо лучше:

$str = implode(" ", array_unique(explode(" ", $string)));
влад
влад
4 месяцев назад

не работает ничего т.к ничего нет

Предыдущая запись
Следующая запись

Давайте дружить
в Telegram

Авторский блог вашего покорного слуги в Telegram про web, программирование, алгоритмы, инструменты разработчика, WordPress, Joomla, Opencart, Laravel, Moonshine, фильмы и сериалы