Есть ли эффективный способ заменить все повторяющиеся не буквенно-цифровые символы одиночными символами?
Этот вопрос заставляет быть явным в отношении знаков препинания:
PHP — Удаление повторяющихся знаков препинания?
Вот так:
$str = preg_replace('~[?!]{2,}~', '?', preg_replace('~([.,!?])(\\1+)~', '\\1', $str));
Можно ли добиться того же результата, но для ВСЕХ не буквенно-цифровых символов без явной ссылки на них по имени?
Вот вариант использования:
Hello... how are you!!?? I''m bored!!----!!!&&&&&^^^^%%%(()))((<<<<<
to
Hello. how are you!? I'm bored!-!&^%()(<
ОБНОВЛЕНИЕ
К сожалению, вышеизложенное слишком глубоко затрагивает один вариант использования: http://
. Как можно сохранить двойные /
для URL-адресов (или просто когда они следуют за :
), но не разрешить регулярное повторение /
или даже более 2 /
после :
. Вот один вариант использования:
My ////favorite//// site is http://///example.com!!!!!!!
становится:
My /favorite/ site is http://example.com!