如何在perl中将字符串截断为特定长度?

时间:2013-01-21 15:10:11

标签: perl

我无法在Perl中找到“将字符串截断为特定长度”。 有没有内置的方式?

更新

输入:$str = "abcd";

输出(截断3个字符):$ str是abc

7 个答案:

答案 0 :(得分:37)

您想使用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 :(得分:9)

对于任意长度的字符串,其中truncate length可能比字符串长度长,我会选择替换

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

对于较短的字符串,替换将不匹配,字符串将保持不变。方便的\K转义可以用lookbehind断言或简单捕获代替:

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

答案 2 :(得分:3)

只要您的原始字符串长度至少为3个字符,就可以使用substr作为左值调用。

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

可能需要检查字符串的初始长度,就好像它短于3个字符一样,无法将此substr调用的返回值分配给(有关详细信息,请参阅perldoc -f substr) )并且试图这样做会导致错误。

答案 3 :(得分:3)

除了substr()或正则表达式之外,您还可以使用printfsprintf

请参阅perldoc -f sprintf

  

对于字符串转换,指定精度会将字符串截断为   适合指定的宽度:

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

答案 4 :(得分:1)

如果我理解正确,您需要像php wordwrap()一样使用字符串,所以:

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

如果您只需要前N个字符:

print substr $string, 0, 50;

答案 5 :(得分:1)

或者你可以使用正则表达式来做同样的事情。

#!/usr/bin/perl -w

use strict;

my $str = "abcd";

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

答案 6 :(得分: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) = '' };