Я пытаюсь удалить повторяющиеся символы из строк, как
Я ноооовве это. Это потрясающе. Очень хорошо.
к выводу, как:
Мне это нравится. Это здорово, очень хорошо.
Я уже использую в PHP эту функцию
$ str = preg_replace («/ (.) \ 1 + /», «$ 1», $ str);
Но это выводит
Мне это нравится. Это круто Очень хорошо.
Проблема в словах, которые уже должны были иметь повторяющиеся символы типа «хорошо» или «круто»
Я полагаю, что вы можете хранить разрешенные слова (например, «хорошо» и «круто») в словаре Trie.
Всякий раз, когда вы проверяете слово на наличие повторяющихся символов, вы должны разрешить дублирование символов до точки, где в словаре все еще есть несколько допустимых слов с этим префиксом.
Когда в словаре нет допустимых слов для префикса, вы можете удалить повторяющиеся символы с этого момента
Например: если вы проверяете слово «Goooood»
отметьте «Go» в три, он вернет «God» и «Good» в качестве правильных слов
отметьте «Goo» в Trie, он вернет «Good» в качестве действительного слова
проверьте «Gooo» в три, он скажет, что нет действительных слов
Поэтому вы продолжаете «Goo» и удаляете остальную часть
Так как вы начали с регулярного выражения, вы можете продолжить с регулярным выражением.
использование негативный взгляд & негативный прогноз чтобы проверить, есть ли до или после повторяющегося письма что-то, с чем вы бы не хотели совпадать.
$str = preg_replace('/(?<!g|c)(\w)\1+(?!d|l)/', '$1', $str);
К сожалению, это подразумевает написание списка возможных префиксов и суффиксов.