Удаление повторяющихся символов

Тема в разделе "Регулярные выражения", создана пользователем yeaahhh, 10 янв 2015.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья. Помогите с регуляркой, пожалуйста..
    Необходимо превращать любой из списка символов: _,?!#@%$:* &)(- в 1 символ, если их несколько..
    Т.е. Привет!!!!!!! Тебя зовут Вася??? необходимо Привет! Тебя зовут Вася?
    Код:
    $comments = preg_replace("/([_]|[,]|[\?]|[!]|[#]|[@]|[%]|[$]|[:]|[*]|[&]|[ ]|[\)]|[\(]|[-]){2,}/", "\\1", $comments);
    
    Буду очень признателен за помощь..
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.520
    Симпатии:
    1.368
    Теоретически, вроде бы, существует возможность сделать через одну регулярку, но для простоты легче передать шаблон как массив:
    PHP:
    $pattern = array("/([!]){2,}/""/([&]){2,}/""/([?]){2,}/"); // и т.д. весь ряд символов
    $comments preg_replace($pattern"\\1"$comments);
     
    yeaahhh нравится это.
  3. xpert13

    xpert13 <(*_*)>

    Moderator
    Регистр.:
    7 ноя 2008
    Сообщения:
    182
    Симпатии:
    455
    На самом деле всё намного проще:

    Код:
    $comments = preg_replace('/([_,\\?!#@%\\$:\\* &\\)\\(\\-])\\1+/', "$1", $comments);
     
    yeaahhh и latteo нравится это.
Статус темы:
Закрыта.