给定字符串而不是数组,如何在 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
我在 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