Регулярное выражение для очистки повторяющихся слов

Напишите регулярное выражение, которое удаляло бы идущие подряд (через один или несколько пробелов) два и более одинаковых слов, причем так, чтобы не осталось пробелов. Считайте все слова состоящими из маленьких латинских букв


Для поиска повторяющихся слов необходимо воспользоваться регулярным выражением, которое бы отбирало слова обозначенные границами слова, записывало бы их в именованный буфер, а затем используя идентификатор этого буфера, находила повторяющиеся в строке слова. После чего, применяя функцию замены по регулярному выражению, заменить все найденные вхождения на пустую строку (удалить слова-дубликаты):

/*
 * удаляет идущие подряд (через один или несколько пробелов) два и более одинаковых слов
 * */

function escapeDuplicateWords($text)
{
    $pattern = '/(\b\w+\b\s)(?=.?\1)/si';
    
    // удаляем пробелы до/после строки
    $text = trim($text);
    
    // удаляем лишние пробелы внутри строки
    $text = preg_replace('/\s\s+/', ' ', $text);
    
    // добавляем пробел вконце строки
    $text = preg_replace('/(.+)/', '$1 ', $text);
    
    //применяем основной шаблон
    return preg_replace($pattern, '', $text);
}

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

$pattern = '/(\b\w+\b\s)(?=.*?\1)/si';

Для кириллицы:

$pattern = '/(\b[а-яА-яёЁ]+\b\s)(?=.*?\1)/siu'

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

Посмотреть пример в интерактиве

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

Посмотреть пример в интерактиве

Cервис для регулярок #1

Cервис для регулярок #2



Похожие заметки:

Простое модальное окно на jQuery

Простой пример реализации модального окна, которое должно закрываться по клику вне области окна и быть открытым при кликах в нем

Открыть здесь

3318

Найти сумму произведений всех простых чисел

Найдите сумму произведений всех простых чисел, меньших 200, на их порядковые номера, считая, что первым простым числом является 2

Открыть здесь

521

Прелоадер до загрузки страницы

Показываем прелоадер на страницах сайта, до его полной загрузки, реализация плавного исчезновения гифки и появление контента

Открыть здесь

1700


Перед тем как писать комментарии, рекомендую ознакомиться:

Markdown синтаксис »

Оформление кода »

Нужна аватарка »

Комментарии


1
avatar

Игорь сказал 16-01-2018 в 13:14


$pattern = '/(\b\w+\b\s)(?=.?\1)/si'

Не работает на примере напримере где в строке есть слово сочетанием которого заканчивается последнее слово Example U EU Отсюда например вырежет букву U

Example UFO BUFO Отсюда например вырежет букву UFO ит п