Intereting Posts
.htaccess доступен только через ip Извлечение данных с веб-сайта через PHP Разбор HTML-страницы с использованием curl и xpath в PHP Как я могу определить уникальный URL-адрес для пользователя без использования их идентификатора? PHP Сохранение пути загрузки файла пользователя после завершения проверки Файл загрузки Codeigniter не работает в Интернете, но работает на localhost Вызов функции в методе класса? Когда следует закрыть соединение db? Правильный способ добавления нового поля в страницу продукта администратора в Prestashop 1.7 как защитить php-файл с .htaccess от загрузки с помощью php5 Загрузка HTML-файла с использованием скрипта AJAX и PHP – помощь? Преобразование XML в CSV с помощью PHP Как добавить массив как свойство объекта в класс, объявленный в PHP-расширении? Неустранимая ошибка: вызов функции-члена bind_param () на boolean Функция даты в PHP Не работает должным образом

Как заменить двойные буквы на одну букву?

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

Например:

School -> Schol Google -> Gogle Gooooogle -> Gogle VooDoo -> Vodo 

Я попробовал следующее, но застрял во втором параметре в eregi_replace.

 $word = 'Goooogle'; $word2 = eregi_replace("([az]{2,})", "?", $word); 

Если я использую \\\1 для замены?, Он будет отображать точное совпадение. Как сделать это единственной буквой?

Может ли кто-нибудь помочь? благодаря

См. Регулярное выражение для замены двух (или более) последовательных символов только одним?

Кстати: вы должны использовать функции preg_* (PCRE) вместо устаревших функций ereg_* (POSIX).

Ответ Ричарда Салая ведет правильный путь:

 $word = 'Goooogle'; $word2 = preg_replace('/(\w)\1+/', '$1', $word); 

Вы не только захватываете всю вещь (а не только первый символ), но {2,} рематчаете [az] (а не исходное совпадение). Он должен работать, если вы используете:

 $word2 = eregi_replace("(\w)\1+", "\\1", $word); 

Какая обратная ссылка на исходный матч. Вы можете заменить \ w на [az], если хотите.

+ Требуется для вашего примера Goooogle (в любом случае для механизма регулярных выражений JS), но я не уверен, почему.

Помните, что вам нужно будет использовать флаг «global» («g»).

Попробуй это:

 $string = "thhhhiiiissssss hasss sooo mannnny letterss"; $string = preg_replace('/([a-zA-Z])\1+/', '$1', $string); 

Как это работает:

 / ... / # Marks the start and end of the expression. ([a-zA-Z]) # Match any single az character lowercase or uppercase. \1+ # One or more occurrence of the single character we matched previously. $1 \1+ # The same single character we matched previously.