Perl 获取文件中特定字符串的每个实例后面的7个字符

Perl 获取文件中特定字符串的每个实例后面的7个字符,perl,Perl,我正在寻找一种方法来获取文件中单词“ISBN=“”的每个实例后面的7个字符。文件中每行有一个ISBN= 所以有点像 my @data = (); my $word = "ISBN="; foreach my $line (@file) { if (index($line, $word) ge 0) { my $d = next seven characters; push (@data, $d); } } 我不知道…听起来像正则表达式,捕获会更

我正在寻找一种方法来获取文件中单词
“ISBN=“
”的每个实例后面的7个字符。文件中每行有一个
ISBN=

所以有点像

my @data = ();
my $word = "ISBN=";

foreach my $line (@file) {
    if (index($line, $word) ge 0) {
        my $d = next seven characters;
        push (@data, $d);
    }
}

我不知道…

听起来像正则表达式,捕获会更容易:

if ($line =~ /ISBN=(.{7})/) {
    push @data, $1;
}

听起来像是正则表达式,捕获会更容易:

if ($line =~ /ISBN=(.{7})/) {
    push @data, $1;
}

要从字符串中的已知索引中获取固定数量的字符,请使用以下函数:

my $d = substr $line, index($line, $word) + length($word), 7;

要从字符串中的已知索引中获取固定数量的字符,请使用以下函数:

my $d = substr $line, index($line, $word) + length($word), 7;

您应该使用
while()
来迭代文件,而不是将其拖入数组。您应该使用
while()
来迭代文件,而不是将其拖入数组。我认为正则表达式需要g修饰符。看看perldoc.perl.org上的perlreftut@EricJablow你为什么这么认为?@EricJablow不,我想我们不用多次匹配就可以处理得很好。特别是因为OP说每行只有一个
ISBN=
字符串。您正在使用
$word
它应该位于
$line
的位置
$word
包含我们正在查找的前缀。我认为正则表达式需要g修饰符。看看perldoc.perl.org上的perlreftut@EricJablow你为什么这么认为?@EricJablow不,我想我们不用多次匹配就可以处理得很好。特别是因为OP说每行只有一个
ISBN=
字符串。您正在使用
$word
它应该位于
$line
的位置
$word
包含我们要查找的前缀。谢谢,这正是我要查找的前缀@TLP,Barmar是对的,应该使用$line而不是$word。但我并没有使用特别有启发性的字符串名称……谢谢,这正是我想要的@TLP,Barmar是对的,应该使用$line而不是$word。但我没有使用特别有启发性的字符串名称。。。