1, B.O.B.A.H. (??), 10:34, 14/10/2004 [ответить]
| +/– |
а так не работает?
s/^\ *// # удалит только пробелы
s/^\s*// # включая табуляцию и переход на новую строку | |
|
2, Maxim Chirkov (ok), 22:23, 16/10/2004 [^] [^^] [^^^] [ответить]
| +/– |
Описанный в совете пример работает быстрее для относительно больших строк.
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/;'
}
);
| |
|
3, Skif (ok), 18:20, 24/12/2004 [ответить]
| +/– |
пользуюсь s/^[\s\t]+/g
Не знаю на сколько быстрее/медленнее, но понятнее и не громоздко. | |
|
5, Dan (??), 01:46, 23/10/2016 [^] [^^] [^^^] [ответить]
| +/– |
Метасимвол \s по-хорошему включает в себя \t.
| |
|
|