Как удалить повторяющиеся символы из строки, но с исключениями типа «хорошо» или «круто»?

Я пытаюсь удалить повторяющиеся символы из строк, как
Я ноооовве это. Это потрясающе. Очень хорошо.

к выводу, как:
Мне это нравится. Это здорово, очень хорошо.

Я уже использую в PHP эту функцию
$ str = preg_replace («/ (.) \ 1 + /», «$ 1», $ str);

Но это выводит
Мне это нравится. Это круто Очень хорошо.

Проблема в словах, которые уже должны были иметь повторяющиеся символы типа «хорошо» или «круто»

0

Решение

Я полагаю, что вы можете хранить разрешенные слова (например, «хорошо» и «круто») в словаре Trie.

Всякий раз, когда вы проверяете слово на наличие повторяющихся символов, вы должны разрешить дублирование символов до точки, где в словаре все еще есть несколько допустимых слов с этим префиксом.

Когда в словаре нет допустимых слов для префикса, вы можете удалить повторяющиеся символы с этого момента

Например: если вы проверяете слово «Goooood»

отметьте «Go» в три, он вернет «God» и «Good» в качестве правильных слов
отметьте «Goo» в Trie, он вернет «Good» в качестве действительного слова
проверьте «Gooo» в три, он скажет, что нет действительных слов

Поэтому вы продолжаете «Goo» и удаляете остальную часть

0

Другие решения

Так как вы начали с регулярного выражения, вы можете продолжить с регулярным выражением.

использование негативный взгляд & негативный прогноз чтобы проверить, есть ли до или после повторяющегося письма что-то, с чем вы бы не хотели совпадать.

$str = preg_replace('/(?<!g|c)(\w)\1+(?!d|l)/', '$1', $str);

К сожалению, это подразумевает написание списка возможных префиксов и суффиксов.

0

По вопросам рекламы [email protected]