Верх страницы
Логотип Telegram
@Злой_Полицейский — авторский канал вашего покорного слуги в Telegram, где я пишу заметки о веб-разработке, программировании, PHP, инструментах и WordPress.
Обложка к записи Удаление повторяющихся слов из текста
Время для прочтения: 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

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

Суровый русский разработчик. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все.

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

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

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

Не вышло

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

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

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

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

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

Можно и так)

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

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

Amsterdam
Amsterdam
4 лет назад

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

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

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

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

Спасибо!

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

Михаил Кобзарёв (mihdan)

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