注: LinuxでPerl5を実行しています
私は現在、いくつかの単語を入力してから、「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";
}
}