31

Perl で「文字列を特定の長さに切り詰める」を見つけることができません。組み込みの方法はありますか?

アップデート:

入力: $str = "abcd";

出力 (3 文字で切り捨て): $str はabc

4

7 に答える 7

43

機能を使用したいsubstr()

$shortened = substr( $long, 0, 50 ); # 50 characters long, starting at the beginning.

詳細については、perldoc

perldoc -f substr

あなたの場合、それは次のようになります。

$str = 'abcd';
$short = substr( $str, 0, 3 );
于 2013-01-21T15:13:51.787 に答える
10

切り捨てられた長さが文字列の長さよりも長くなる可能性がある任意の長さの文字列の場合、置換を選択します

$str =~ s/.{3}\K.*//s;

短い文字列の場合、置換は一致せず、文字列は変更されません。便利\Kなエスケープは、後読みアサーションまたは単純なキャプチャに置き換えることができます。

s/(?<=.{3}).*//s   # lookbehind
s/(.{3}).*/$1/s    # capture
于 2013-01-21T15:45:45.883 に答える
5

substr()または 正規表現の代わりに or を使用できることprintfにも言及すると便利でしょうsprintf

参照 perldoc -f sprintf:

文字列変換の場合、精度を指定すると、指定された幅に収まるように文字列が切り捨てられます。

  printf '<%.5s>', "truncated";   # prints "<trunc>"
  printf '<%10.5s>', "truncated"; # prints "<     trunc>"
于 2017-01-09T18:29:37.607 に答える
4

元の文字列が少なくとも 3 文字の長さである限り、呼び出しをsubstr左辺値として使用できます。

my $str = "abcd";
substr($str, 3) = "";
print "$str\n";   # prints "abc"

文字列の最初の長さを確認する必要がある場合があります。3 文字未満の場合、この呼び出しの戻り値をsubstrに代入できず (詳細については、を参照perldoc -f substr)、代入しようとするとエラーが発生するためです。

于 2013-01-21T15:33:39.553 に答える
1

最も自然な方法は、substrを使用して必要な部分を抽出することです。

$first_n = substr($string, 0, $n);

文字列を変更するだけで、少なくとも目的の長さであることが確実な場合は、次のようにします。

substr($string, $n) = '';

確信が持てない場合は、次のことができます。

use List::Util "min";
substr($string, min($n, length($string))) = '';

または例外をキャッチします。

eval { substr($string, $n) = '' };
于 2013-01-21T17:46:47.410 に答える
1

または、regexp を使用して同じことを行うこともできます。

#!/usr/bin/perl -w

use strict;

my $str = "abcd";

$str =~ /(\w{0,3})/;
print $1;
于 2013-01-21T15:34:00.303 に答える
1

php wordwrap()私が正しく理解していれば、文字列のようにする必要があるので、次のようになります。

use Text::Format;
print Text::Format->new({columns => 50})->format($string);

最初の N 文字だけが必要な場合:

print substr $string, 0, 50;
于 2013-01-21T15:12:47.337 に答える