给定字符串而不是数组,如何在 Perl 中基于 FIFO 逐字翻译字符串?

How to translate a string, word by word, on FIFO basis in Perl given a string not an array?

我在 Perl 中有一个给定的字符串(这意味着我无法在开头将每个标记存储在数组中):

$string = "applegrapeorangelimepineapple";

如何匹配和 'shift' 字符串中的第一个单词(如果它与单词列表匹配并打印相关值)?

我的意思是如果apple匹配到单词"red",我需要先打印单词"red",然后从字符串$string中删除子串"apple",然后$string 将变为:

$string = "grapeorangelimepineapple";

并继续再次检查第一个单词,如果它与单词主列表中的单词匹配 "grape",程序将打印 "purple",依此类推?

总的来说,给定一个字符串:

$string = "applegrapeorangelimepineapple";

如何翻译成:

"red purple orange lime yellow";

并删除主列表中没有的不相关的单词或字符?

感谢您的帮助。

您可以创建一组您希望匹配的模式,按照您想要匹配它们的顺序,然后重复模式匹配字符串的开头。请注意,下面仅尝试将一种模式与字符串的前面相匹配,而不是所有模式,从您的问题中不清楚您想要哪种行为。无论如何,您应该能够很容易地从这个解决方案中调整该解决方案。

#!/usr/bin/env perl 

use strict; 
use warnings;

use feature qw(say);

my $string = "applegrapeorangelimepineapple";
my @patterns = qw(apple grape orange lime pineapple);
my %pattern_map; 
@pattern_map{@patterns} = qw(red purple orange yellow yellow);

foreach my $pattern ( @patterns ) {
   my ($match) = $string =~ s/^\Q$pattern\E//;
   next unless $match;

   say $pattern_map{$pattern};
}

__END__
red
purple
orange
yellow
yellow