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

SS *_*gde 27 perl

我只是无法在Perl中找到"将字符串截断为特定长度".有内置的方式吗?

更新:

输入: $str = "abcd";

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

And*_*ter 38

您想使用该substr()功能.

$shortened = substr( $long, 0, 50 ); # 50 characters long, starting at the beginning.
Run Code Online (Sandbox Code Playgroud)

更多,请使用 perldoc

perldoc -f substr
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它将是:

$str = 'abcd';
$short = substr( $str, 0, 3 );
Run Code Online (Sandbox Code Playgroud)


TLP*_*TLP 9

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

$str =~ s/.{3}\K.*//s;
Run Code Online (Sandbox Code Playgroud)

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

s/(?<=.{3}).*//s   # lookbehind
s/(.{3}).*/$1/s    # capture
Run Code Online (Sandbox Code Playgroud)

  • 注意那些感兴趣的人:在perl v5.20(至少)中,lookbehind断言的长度限制为255. (2认同)

miv*_*ivk 5

还可能有用的是substr(),您可以使用printfor代替or 正则表达式sprintf

perldoc -f sprintf

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

  printf '<%.5s>', "truncated";   # prints "<trunc>"
  printf '<%10.5s>', "truncated"; # prints "<     trunc>"
Run Code Online (Sandbox Code Playgroud)