注意:我在 Linux 上运行 Perl 5
我目前正在做一个项目,我必须输入几个单词,然后返回以“d”开头并以“e”结尾的单词。我没有使用预先完成的列表,例如我输入到控制台Done、Dish、Dome 和 Death中。我希望它返回Done 和 Dome,而不是其他词。我希望获得如何在 Perl 中执行此操作的帮助,但如果 Perl 不成功,C++ 会有所帮助。
perl -ne ' print if /^d/i && /e$/i ' < words
由于您使用的是 Linux,因此使用 grep(1) 可能更简单:
grep -i '^d.*e$' < words
这在 Perl 中几乎是微不足道的:
$ perl -nE 'say "ok" if /^d.*e$/i'
Done
ok
Dish
Dome
ok
Death
如果行匹配,它将从 STDIN 和say
s读取。ok
这在调试正则表达式时很有用。你只想输出匹配的行,所以你可以简单地替换 say "ok"
为say
$ perl -nlE 'say if /^d.*e$/i' words
whilewords
是你的 words 文件的文件名。它神奇地读出了它的台词。该正则表达式匹配的简短说明:
^ # start of the line
d # the literal character 'd' (case-insensitive because of the i switch)
.* # everything allowed here
$ # end of the line
我不经常回答 perl 问题,但我认为这可以解决问题。
my @words = ...;
@words = grep(/^d.*e$/i, @words);
grep 使用正则表达式来过滤单词。
怎么样:
#!/usr/bin/perl -Tw
use strict;
use warnings;
for my $word (@ARGV) {
if ( $word =~ m{\A d .* e \z}xmsi ) {
print "$word\n";
}
}