Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление из строки дповторяющихся символов 
:(
    Опции темы
XeLpeR
Дата 29.9.2008, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.9.2008

Репутация: нет
Всего: нет



Помогите пожалуйста... 
Если в строке  подряд встречаются 4 или более повторющихся символа их нужно укоротить до 3-х. 
Например, строку "хааааа)))))))))))" необходимо преобразовать в  "хааа)))"...
Зарание спасибо !



PM MAIL   Вверх
KSURi
Дата 29.9.2008, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Код

s/(a{3,})/substr($1,0,1)x(length($1)-1)/e


Первое, что голову пришло. По производительности думаю далеко не лучший вариант, зато более-менее универсально.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 29.9.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Уважаемый XeLpeR, предложу тоже не лучший вариант:

Код

$text =~ s/(.)\1{3,}/$1$1$1/g;



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
XeLpeR
Дата 29.9.2008, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.9.2008

Репутация: нет
Всего: нет



Большое спасибо !
Ваши варианты гораздо лучше чем мой на пхп = ))) 

Код

function rm_repeat ($text)
{
  $l = strlen ($text);
  for ($i = 0; $i < $l; $i++)
    {
      if ($text[$i] !== $text[$i+1])
    {
      $res .= $text[$i];
    }
      elseif ($text[$i+1] !== $text[$i+2])
      {
    $res .= $text[$i];
      }
      elseif (in_array($text[$i], array('1','2','3','4','5','6','7','8','9','0'))) // даты
      {
        $res .= $text[$i];
      }
      elseif ($text[$i] == "w") // не трогаем ссылки
      {
    $res .= $text[$i];
      }
    }
  return $res;
}


п.с. правда он удаляет двухкратные повторения.

Это сообщение отредактировал(а) XeLpeR - 29.9.2008, 18:19
PM MAIL   Вверх
amg
Дата 30.9.2008, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Кстати, XeLpeR, вариант ginnie будет работать и на PHP (в функции preg_replace).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.