#!/usr/bin/perl
my $str = "abc def yyy ghi";
print substr($str, 0 , index($str,' '));
我希望substr打印def yyy
print substr ($str, index ($str, ' '), rindex($str, ' ') does not work?
有什么想法吗?
答案 0 :(得分:4)
您没有完全指定您想要的逻辑,但最好的猜测是您要在第一个和最后一个空格之间打印字符。
您的示例代码会打印太多字符,因为它会在最后一个空格之前打印#个字符(在您的示例中,10而不是7)。要修复,您需要通过减去第一个空格前的字符数来调整打印的字符数。
此外,您需要在“索引”值的右侧开始一个字符以避免打印第一个空格 - 在下面的示例中为“+1”和“-1”
$cat d:\scripts\test1.pl
my $str = "abc def yyy ghi";
my $first_space_index = index ($str, ' ');
my $substring = substr($str, $first_space_index + 1,
rindex($str, ' ') - $first_space_index - 1);
print "|$substring|\n";
test1.pl
|def yyy|
答案 1 :(得分:3)
第三个参数是长度,而不是偏移量。但是从字符串末尾开始表示字符可能是否定的,这很容易从rindex和长度中得到,如下所示:
my $str = "abc def yyy ghi";
print substr( $str, 1 + index( $str, ' ' ), rindex( $str, ' ' ) - length($str) );
(注意加1以获得第一个空格后的偏移量。)
答案 2 :(得分:2)
如果要在第一个和最后一个空格之间打印文本,使用正则表达式会不会更容易?
print $1 if "abc def yyy ghi" =~ / (.*) /
答案 3 :(得分:1)
my $str = "abc def yyy ghi";
my @row = split ' ', $str;
pop @row and shift @row;
print "@row";
效率更低,但更好地捕捉实际意图