Trim

| Комментариев: 3

Себастьян Виллинг затронул в своем блоге вечную тему о том, как отрезать от строки пробелы с обеих сторон, сделав это в одно действие.

Вместо двух замен

$str =~ s/^\s+//;
$str =~ s/\s+$//;

Себастьян указывает на такой вариант:

$str =~ s/^\s*(.*?)\s*$/$1/;

Интересно почитать и комментарии, где предлагают несколько похожих вариантов с альтернативами в регулярном выражении:

$str =~ s/(^\s+|\s+$)//g;

$str =~ s/(?:^\s+|\s+$)//g;

$str =~ s/^\s*|\s*$//g;

$str =~ s/^\s+|\s+$//g;

P. S. В комментариях, кстати, видно, как почти одно и то же выражение разные люди записывают по-разному.

Комментариев: 3

а самый правильный - этот
$str =~ s/^\s+|\s+$//g;

если есть 1 или более символов

другие варианты с \s* - не очень разумны т.к. от 0 до бесконечности и думаю сработают в больших числах медленней.

у себастьяна самый худший вариант - копирование с бекреференсом, память тратится зазря

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 02.03.2010 22:42. Автор — ash.

Предыдущая запись — Что для вас @var?

Следующая запись — Массив или список — ответы

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.