燈明日記 このページをアンテナに追加 RSSフィード

ごあいさつ

燈明日記へようこそ!!

燈明日記の主なテーマは、以下の通りです。

そして、燈明日記へ来られたのも『私』と『あなた』の何かのご縁です。なので、どうぞごゆっくりご覧下さい!


2007/12/13(木)

[] PerlでTrimする!

VB系では、文字列の両端にあるスペースを削除するに有名なTrimがあります。

しかし、Perlでは、残念ながらTrimはありませんが、以下の正規表現で一発です。

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

ちょっと解説です。

  • まずは、\sは、文字クラス[ \t\n\r\f](左端にスペース含む)と同義です。
  • 始めに、文字列の先頭から\sの0回の連続にマッチさせる。
  • つぎに、任意1文字の0回の連続に最小マッチさせて、これを$1に記憶する。
  • そして、\sの0回の連続を後尾までマッチさせる。
  • 最後に、文字列全体を$1で置換する。

以下のように、2回に分ければ、両端でも片方のみでも大丈夫です。

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

追記:

上記は、半角系のスペース文字に対するTrimです。全角系のスペースを考慮に入れると以下が参考になります。

kitskits 2007/12/14 00:57 ・¥s は空白も含みます。(UnicodeをサポートしているPerlなら、”¥x{2028}”なども含みます)
・¥1 を使うのは正規表現パターンの中(s/ / / の左側)だけにしておき、置換文字列(s/ / / の右側)では $1 を使った方がいいと思います。(use warnings していると警告されます)
・「タグ付き正規表現」は秀丸エディタ独自の用語ではないでしょうか。(括弧ではなく¥fというタグをパターンに入れて文字列を捕捉するため)
・あと、効率を考えると $string =~ s/^¥s+//; $string =~ s/¥s+$//; と2回に分けた方がおそらく速いです。

chaichanPaPachaichanPaPa 2007/12/14 19:38 kitsさん、いつもありがとうございます。
kitsさんのご指摘通りです。
思い込み違いをしていました。お恥かしい…
かさねかさね、ありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元