Верх страницы
Обложка к записи Удаление повторяющихся слов из текста
Время для прочтения: 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
12 лет назад

Не вышло

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

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

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

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

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

Можно и так)

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

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

Amsterdam
Amsterdam
5 лет назад

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

Рома
Рома
1 год назад
Ответить на  Кобзарёв Михаил

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

Рома
Рома
1 год назад
Ответить на  Кобзарёв Михаил

Спасибо!

Рома
Рома
1 год назад
Ответить на  Кобзарёв Михаил

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

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

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

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

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

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