2013-01-21 87 views

回答

36

你想使用substr()函數。

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

如需更多信息,請使用perldoc

perldoc -f substr 

在你的情況,這將是:

$str = 'abcd'; 
$short = substr($str, 0, 3); 
+1

謝謝你的回答:) –

1

如果我理解正確的,你需要做的像phpwordwrap()一個字符串,所以:

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

如果你只需要第一個N個字符:

print substr $string, 0, 50; 
3

只要你的原始字符串長度至少爲3個字符,你可以使用作爲左值的substr的呼叫。

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

字符串的初始長度可能需要被檢查,就好像它短於3個字符,這個呼叫到substr返回值不能被分配給(參見perldoc -f substr獲得更多信息),並試圖這樣做會導致錯誤。

1

或者你也可以使用regexp來做同樣的事情。

#!/usr/bin/perl -w 

use strict; 

my $str = "abcd"; 

$str =~ /(\w{0,3})/; 
print $1; 
8

對於任意長度的字符串,其中截斷長度可以超過字符串長度,我會選擇一個替代

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

對於較短的字符串,替代將不匹配,該字符串將保持不變。便利\K逃逸可以用向後斷言,或者一個簡單的捕捉替代:

s/(?<=.{3}).*//s # lookbehind 
s/(.{3}).*/$1/s # capture 
+2

有興趣的人請注意:在perl v5.20(至少),lookbehind斷言的長度限制爲255。 – Bentoy13

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) = '' }; 
1

這也可能是有用的也提到,而不是substr()或正則表達式,你可以使用printfsprintf

perldoc -f sprintf

進行字符串轉換,指定精度截斷字符串 適合指定寬度:

printf '<%.5s>', "truncated"; # prints "<trunc>" 
    printf '<%10.5s>', "truncated"; # prints "<  trunc>"