URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 4455
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Как в Perl вырезать у строки лидирующие пробелы"

Отправлено auto_tips , 14-Окт-04 10:34 
  $str =~ s/^\s*([^\s]?.*)$/$1/;
  $str =~ s/^(.*[^\s])\s*$/$1/; # два regex работают быстрее, чем один более сложный


URL:
Обсуждается: http://www.opennet.me/tips/info/396.shtml


Содержание

Сообщения в этом обсуждении
"Как в Perl вырезать у строки лидирующие пробелы"
Отправлено B.O.B.A.H. , 14-Окт-04 10:34 
а так не работает?
s/^\ *// # удалит только пробелы
s/^\s*// # включая табуляцию и переход на новую строку

"Как в Perl вырезать у строки лидирующие пробелы"
Отправлено Maxim Chirkov , 16-Окт-04 22:23 
Описанный в совете пример работает быстрее для относительно больших строк.
s/^\s*//;$str =~ s/\s*$//; быстрее в случае небольших строк (примерно до 50 символов).
$str =~ s/^\s*(.*?)\s*$/$1/;' - наименее оптимальный вариант.

$str =~ s/^\s*//;$str =~ s/^(.*[^\s])\s*$/$1/; - комбинированный вариант, очень неплохой результат.

тестировал так:

#!/usr/bin/perl
use strict;
use Benchmark;

timethese(100000,
    {
      test1 => 'my $str="  test "; $str =~ s/^\s*([^\s]?.*)$/$1/;$str =~ s/^(.*[^\s])\s*$/$1/;',
      test2 => 'my $str="  test "; $str =~ s/^\s*//;$str =~ s/\s*$//;',
      test3 => 'my $str="  test "; $str =~ s/^\s*(.*?)\s*$/$1/;',
      test4 => 'my $str="  test "; $str =~ s/^\s*//;$str =~ s/^(.*[^\s])\s*$/$1/;'
    }
);


"Как в Perl вырезать у строки лидирующие пробелы"
Отправлено Skif , 24-Дек-04 18:20 
пользуюсь s/^[\s\t]+/g
Не знаю на сколько быстрее/медленнее, но понятнее и не громоздко.

"Как в Perl вырезать у строки лидирующие пробелы"
Отправлено Thekostya , 05-Дек-06 18:55 
>  пользуюсь s/^[\s\t]+/g

а g  в конце зачем ? :)


"Как в Perl вырезать у строки лидирующие пробелы"
Отправлено Dan , 23-Окт-16 01:46 
Метасимвол \s по-хорошему включает в себя \t.