Подтвердить что ты не робот

Perl: функция для обрезки строк и конечных пробелов

Есть ли встроенная функция для обрезки ведущего и конечного пробелов, так что trim(" hello world ") eq "hello world"?

4b9b3361

Ответ 1

Это доступно в String::Util с помощью метода trim:

Примечание редактора: String::Util не является основным модулем, но вы можете установить его из CPAN с помощью [sudo] cpan String::Util.

use String::Util 'trim';
my $str = "  hello  ";
$str = trim($str);
print "string is now: '$str'\n";

печатает:

Строка

теперь "hello"

Однако достаточно легко сделать сам:

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

Ответ 2

Здесь один подход с использованием регулярного выражения:

$string =~ s/^\s+|\s+$//g ;     # remove both leading and trailing whitespace

Perl 6 будет включать функцию обрезки:

$string .= trim;

Источник: Wikipedia

Ответ 3

Нет встроенной функции trim, но вы можете легко реализовать свою собственную, используя простую замену:

sub trim {
    (my $s = $_[0]) =~ s/^\s+|\s+$//g;
    return $s;
}

или используя неразрушающую замену в Perl 5.14 и более поздних версиях:

sub trim {
   return $_[0] =~ s/^\s+|\s+$//rg;
}

Ответ 6

Я также использую положительный lookahead для обрезки повторяющихся пробелов внутри текста:

s/^\s+|\s(?=\s)|\s+$//g

Ответ 7

Для тех, кто использует Text:: CSV, я нашел этот поток, а затем заметил в модуле CSV, что вы можете его отключить с помощью переключателя:

$csv = Text::CSV->new({allow_whitespace => 1});

Логика обратная в том, что если вы хотите стричь, тогда вы установите значение 1. Перейдите на фигуру. Надеюсь, это поможет любому.

Ответ 8

Применить: s/^\s*//; s/\s+$//; к нему. Или используйте s/^\s+|\s+$//g, если хотите быть фантазией.

Ответ 9

Один параметр Text::Trim:

use Text::Trim;
print trim("  example  ");

Ответ 10

Нет, но вы можете использовать оператор подстановки s/// и утверждение \s, чтобы получить тот же результат.