Perl:文字列の先頭と末尾の空白を削除する関数


82

次のように先頭と末尾の空白を削除する組み込み関数はありtrim(" hello world ") eq "hello world"ますか?


3
参考:Perlでの文字列の同等性は、演算子によってテストされeqます。
A.レックス

5
あなたが得たすべての答えについて少し説明します:s/^\s+|\s+$//g;vss/^\s*//; s/\s*$//;後者は、これを行うための(ほんの少しだけ)より慣用的な方法です。この場合、正規表現エンジンを最初からやり直す方が実際には交互よりも速いからです。これについて詳しくは、JeffreyFriedlのMasteringRegularExpressionsをご覧ください。(これがPerlの新しいバージョンで修正された場合を
除き

4
Javaと.NETのバックグラウンドから来ているので、これが言語に組み込まれていないことにほとんどショックを受けています。皆さんありがとう!
Landon Kuhn 2011年

3
@ landon9720、それはやや次のとおりです。Scalar:: Utilにはトリムがあり、5.7.3以降のコアです-それは2002年です!
Hugmeir 2011年

3
Hugmeir、これは間違っています。Etherの答えを参照してください
daxim 2011年

回答:


89

正規表現を使用する1つのアプローチは次のとおりです。

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

Perl6にはトリム機能が含まれます。

$string .= trim;

出典:ウィキペディア


5
私はこれを月に一度くらい調べます。残念ながら、毎回賛成することはできません。
カイル2014年

82

これは、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";

プリント:

文字列は「こんにちは」になりました

ただし、自分で行うのは簡単です。

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

@ mklement0もそうなることもありません。しかし、誰もがCPANのモジュールを使用する必要があるため、これは関係ありません。
エーテル2015年

2
なぜ誰もがCPANのモジュールを使用する必要があるのですか?Linuxディストリビューション(debian、redhat、ubuntu)のperlを手動でインストールしたCPANモジュールと組み合わせて使用​​すると、一貫性が難しくなります。Linuxディストリビューションでパッケージとして利用可能なモジュールを使用してperlで何かを実行できると、はるかに優れています
Marki555 2016年

Linuxディストリビューションでパッケージとして利用できる@ Marki555モジュール、CPANからのものです。再パッケージされたばかりです。まだパッケージ化されていない場合は、通常、特定のモジュールをパッケージ化するように要求できます(Debianの人々は特に応答性が高く、役に立ちます)。
エーテル2016年

1
私はそれらもCPANからのものであることを知っています...はい、一般的に私はdebian用の新しいpkgをリクエストできますが、インストールされたdebian安定版リリースでは役に立ちません...それが私がパッケージモジュールを好む理由ですが、CPANを直接使用する場合本当に必要です。
Marki555 2016年

4
@Ether敬意を表して、これが非コアモジュールであることを知って本当に感謝しています。この投稿では、かなり単純な正規表現のワンライナーの代わりにモジュールを使用する方法について説明しています。モジュールがコアである場合、私はそれに対してはるかにオープンになります。この場合に関連します。
UncleCarl 2018年

26

組み込みtrim関数はありませんが、単純な置換を使用して独自の関数を簡単に実装できます。

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

またはPerl5.14以降で非破壊置換を使用する:

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


8

ここでperfaqのハウツーを完了してください:http://learn.perl.org/faq/perlfaq4.html#How-do-I-strip-blank-space-from-the-beginning-end-of-a-string-


3

Text :: CSVを使用している場合は、このスレッドを見つけて、CSVモジュール内でスイッチを介して削除できることに気付きました。

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

論理は逆で、ストリップしたい場合は1に設定します。図を見てください。これが誰かに役立つことを願っています。





弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.