我只是無法在Perl中找到「將字符串截斷爲特定長度」。 有沒有內置的方式?如何在perl中將字符串截斷爲特定長度?
UPDATE:
輸入:$str = "abcd";
輸出(截斷爲3個字符):$ str是abc
我只是無法在Perl中找到「將字符串截斷爲特定長度」。 有沒有內置的方式?如何在perl中將字符串截斷爲特定長度?
UPDATE:
輸入:$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);
謝謝你的回答:) –
如果我理解正確的,你需要做的像php
wordwrap()
一個字符串,所以:
use Text::Format;
print Text::Format->new({columns => 50})->format($string);
如果你只需要第一個N個字符:
print substr $string, 0, 50;
只要你的原始字符串長度至少爲3個字符,你可以使用作爲左值的substr
的呼叫。
my $str = "abcd";
substr($str, 3) = "";
print "$str\n"; # prints "abc"
字符串的初始長度可能需要被檢查,就好像它短於3個字符,這個呼叫到substr
返回值不能被分配給(參見perldoc -f substr
獲得更多信息),並試圖這樣做會導致錯誤。
或者你也可以使用regexp來做同樣的事情。
#!/usr/bin/perl -w
use strict;
my $str = "abcd";
$str =~ /(\w{0,3})/;
print $1;
對於任意長度的字符串,其中截斷長度可以超過字符串長度,我會選擇一個替代
$str =~ s/.{3}\K.*//s;
對於較短的字符串,替代將不匹配,該字符串將保持不變。便利\K
逃逸可以用向後斷言,或者一個簡單的捕捉替代:
s/(?<=.{3}).*//s # lookbehind
s/(.{3}).*/$1/s # capture
有興趣的人請注意:在perl v5.20(至少),lookbehind斷言的長度限制爲255。 – Bentoy13
最自然的方法是使用SUBSTR提取你想要的部分:
$first_n = substr($string, 0, $n);
如果你只是想修改字符串,你一定是至少所需的長度:
substr($string, $n) = '';
如果你不能確定,你可以這樣做:
use List::Util "min";
substr($string, min($n, length($string))) = '';
或捕獲異常:
eval { substr($string, $n) = '' };
這也可能是有用的也提到,而不是substr()
或正則表達式,你可以使用printf
或sprintf
。
進行字符串轉換,指定精度截斷字符串 適合指定寬度:
printf '<%.5s>', "truncated"; # prints "<trunc>" printf '<%10.5s>', "truncated"; # prints "< trunc>"
你能更多,更清晰提供樣本輸入/輸出? –