Не понимаю, я в условие написал {1,} это значит, если повторяется больше одного раза, то это всё удалить, но почему не во всех случаях удаляет?
echo preg_replace('#([\w]+)\s\1{1,}#', '$1', 'hello my my my my my world')
//hello world world - работает
//hello world world world - не работает
//hello world world world world - не работает
//hello hello world - работает
//hello hello hello hello world - плохо работает
//hello my my world - работает
//hello my my my world - плохо работает