perl-保留字符串中的前三个单词 我试图从字符串中删除最后几个单词,以减少字符串的长度。请考虑下面的示例字符串。 my $str = "Today is Wednesday April 23 2014"; print substr( $str, 0, rindex( $str, ' ' ) - index($str, ' ') -4 );

perl-保留字符串中的前三个单词 我试图从字符串中删除最后几个单词,以减少字符串的长度。请考虑下面的示例字符串。 my $str = "Today is Wednesday April 23 2014"; print substr( $str, 0, rindex( $str, ' ' ) - index($str, ' ') -4 );,perl,Perl,字符串的值各不相同,基本上我想保留前3个单词,或者换句话说,删除最后3个单词 我知道通过我的方法,我没有以一种有效的方式来做,我想从这里的专家那里得到关于以更有效的方式做这件事的意见 我希望我的输出仅为前3个单词今天是星期三您可以将字符串拆分为单词,然后返回前三个: my $str = "Today is Wednesday April 23 2014"; my @first_three = (split ' ', $str)[0 .. 2]; print "@first_three\n";

字符串的值各不相同,基本上我想保留前3个单词,或者换句话说,删除最后3个单词

我知道通过我的方法,我没有以一种有效的方式来做,我想从这里的专家那里得到关于以更有效的方式做这件事的意见


我希望我的输出仅为前3个单词
今天是星期三

您可以将字符串拆分为单词,然后返回前三个:

my $str = "Today is Wednesday April 23 2014";
my @first_three = (split ' ', $str)[0 .. 2];
print "@first_three\n";

假设您需要保持一个字符限制,而不是只需要每个字符串的前三个字。否则,字符串

I am a spectacular Perl programmer of the very best kind
将被截断为

I am a
给出您的示例字符串,并假设字符限制为22,您可以编写如下内容。它匹配最多22个字符的初始字符串,限制字符串必须在空格字符或对象文本结尾之前以非空格字符结尾

use strict;
use warnings;

my $str = "Today is Wednesday April 23 2014";

my ($abbrev) = $str =~ /^(.{0,22})(?<=\S)(?=\s|$)/;

print $abbrev;

$str=~s/\s+(\s+\s+{2}\K.*/
如果你认为你想要
split/\s+/
,那么你几乎可以肯定应该写
split'
。如果您正在拆分
$\uu
,则它是默认值,因此仅
拆分
拆分“,$”相同。请注意,它必须是包含单个空格的字符串:
split/
不同
use strict;
use warnings;

my $str = "Today is Wednesday April 23 2014";

my ($abbrev) = $str =~ /^(.{0,22})(?<=\S)(?=\s|$)/;

print $abbrev;
Today is Wednesday