Страницы

Поиск по вопросам

вторник, 21 мая 2019 г.

Удаление двойных и более слов

Не понимаю, я в условие написал {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 - плохо работает //hello my my my my my world - hello my my my my my world


Ответ

#(\w+)(\s+\1)+#
(\w+) - 1-ая группа захвата, можно сказать что слово, хотя тут можно поспорить; (\s+\1)+ - 2-ая повторяющаяся группа захвата, от которой вы хотите избавиться и состоит она из 1-го или более пробельных символов и слова из первой группы захвата, так как между словами пробелы все-таки должны быть!
Пример https://regex101.com/r/q1OhHr/1
P.S. Можно еще и флаг i добавить, чтобы регистронезависимая проверка была и флаг u для Юникода.

Комментариев нет:

Отправить комментарий