Forum Webscript.Ru
Программирование => Perl => Тема начата: restart2003 от 25 Сентября 2005, 23:08:54
-
Пользователи моего форума часто норовят оставить сообщения, в которых есть длинные слова, типа "пооооооооооооммммммммммммооооооооггггииииииттттее" или "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!". Они иногда вызывают горизонтальную полосу прокрутки.
Хочу написать код, ставящий пробел в последовательность непробельных символов, превышающую по длине n(например 40).
Пытался разными методами, получается плохо.
Вот один из вариантов, на практике работающий криво (Он разбивает сообщение на подстроки по сто символов, и, если внутри какой-то подстроки есть 50 или более непробельных символов подряд, ставит поседине пробел):
my $c= 1 + int length($message)/100 ;
for (my $i=0;$i<$c; $i++)
{
$buffer = undef;
$buffer = substr($message,$i*100,100);
if($buffer =~ /\\S{50,}/)
{
my $part1 = substr($buffer,0,50);
my $part2 = substr($buffer,50,50);
$buffer = $part1.\' \'.$part2;
}
$message2 .= $buffer;
}
$message = $message2;
Хотелось всё-таки создать нормально работающий код. Своими силами пока не получается.
-
$str =~ s/(\\S{50})(?=\\S)/$1 /g;
Последовательность из 50 непробельных символов, за которыми следует еще один непробельный (его мы не берем, а только заглядываем вперед), то заменяем их на эту последовательность + пробел.
Может быть я и не учел что-то, но на простых примерах работает :).
-
Спасибо.
Так и думал, что опять изобретаю велосипед. Поду подучу регекспы.
Пример заработал.
Модифицировал только немного, чтоб UBBC-теги не резал.