Perl で「文字列を特定の長さに切り詰める」を見つけることができません。組み込みの方法はありますか?
アップデート:
入力: $str = "abcd";
出力 (3 文字で切り捨て): $str はabc
Perl で「文字列を特定の長さに切り詰める」を見つけることができません。組み込みの方法はありますか?
アップデート:
入力: $str = "abcd";
出力 (3 文字で切り捨て): $str はabc
機能を使用したいsubstr()
。
$shortened = substr( $long, 0, 50 ); # 50 characters long, starting at the beginning.
詳細については、perldoc
perldoc -f substr
あなたの場合、それは次のようになります。
$str = 'abcd';
$short = substr( $str, 0, 3 );
切り捨てられた長さが文字列の長さよりも長くなる可能性がある任意の長さの文字列の場合、置換を選択します
$str =~ s/.{3}\K.*//s;
短い文字列の場合、置換は一致せず、文字列は変更されません。便利\K
なエスケープは、後読みアサーションまたは単純なキャプチャに置き換えることができます。
s/(?<=.{3}).*//s # lookbehind
s/(.{3}).*/$1/s # capture
substr()
または 正規表現の代わりに or を使用できることprintf
にも言及すると便利でしょうsprintf
。
文字列変換の場合、精度を指定すると、指定された幅に収まるように文字列が切り捨てられます。
printf '<%.5s>', "truncated"; # prints "<trunc>" printf '<%10.5s>', "truncated"; # prints "< trunc>"
元の文字列が少なくとも 3 文字の長さである限り、呼び出しをsubstr
左辺値として使用できます。
my $str = "abcd";
substr($str, 3) = "";
print "$str\n"; # prints "abc"
文字列の最初の長さを確認する必要がある場合があります。3 文字未満の場合、この呼び出しの戻り値をsubstr
に代入できず (詳細については、を参照perldoc -f substr
)、代入しようとするとエラーが発生するためです。
最も自然な方法は、substrを使用して必要な部分を抽出することです。
$first_n = substr($string, 0, $n);
文字列を変更するだけで、少なくとも目的の長さであることが確実な場合は、次のようにします。
substr($string, $n) = '';
確信が持てない場合は、次のことができます。
use List::Util "min";
substr($string, min($n, length($string))) = '';
または例外をキャッチします。
eval { substr($string, $n) = '' };
または、regexp を使用して同じことを行うこともできます。
#!/usr/bin/perl -w
use strict;
my $str = "abcd";
$str =~ /(\w{0,3})/;
print $1;
php
wordwrap()
私が正しく理解していれば、文字列のようにする必要があるので、次のようになります。
use Text::Format;
print Text::Format->new({columns => 50})->format($string);
最初の N 文字だけが必要な場合:
print substr $string, 0, 50;