注意:我在Linux上运行Perl 5
我正在做一个项目,我必须输入几个单词,然后返回以“d”开头并以“e”结尾的单词。我没有使用预先完成的列表,例如我输入控制台 Done,Dish,Dome和Death 。我希望它返回 Done and Dome ,但不是其他的话。我希望在Perl中获得如何执行此操作的帮助,但如果Perl无法解决问题,C ++会有所帮助。
答案 0 :(得分:4)
perl -ne ' print if /^d/i && /e$/i ' < words
由于您使用的是Linux,因此使用grep(1)可能更简单:
grep -i '^d.*e$' < words
答案 1 :(得分:3)
在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
而words
是您的文字文件的文件名。它神奇地读取它的线条。正则表达式匹配的简短说明:
^ # start of the line
d # the literal character 'd' (case-insensitive because of the i switch)
.* # everything allowed here
$ # end of the line
答案 2 :(得分:2)
我不经常回答perl问题,但我认为这样可以解决问题。
my @words = ...;
@words = grep(/^d.*e$/i, @words);
grep使用正则表达式来过滤单词。
答案 3 :(得分:2)
怎么样:
#!/usr/bin/perl -Tw
use strict;
use warnings;
for my $word (@ARGV) {
if ( $word =~ m{\A d .* e \z}xmsi ) {
print "$word\n";
}
}