1

注: LinuxでPerl5を実行しています

私は現在、いくつかの単語を入力してから、「d」で始まり「e」で終わる単語を返す必要があるプロジェクトを行っています。事前完了リストを使用していません。たとえば、コンソールDone、Dish、Dome、Deathに入力します。DoneとDomeを返したいのですが、他の言葉は返しません。Perlでこれを行う方法についてのヘルプを受け取りたいと思っていますが、Perlが機能しない場合は、C++が役立ちます。

4

4 に答える 4

4

perl -ne ' print if /^d/i && /e$/i ' < words

Linuxを使用しているため、grep(1)を使用する方が簡単な場合があります。

grep -i '^d.*e$' < words

于 2012-11-20T17:25:45.753 に答える
3

これはPerlではほとんど些細なことです。

$ perl -nE 'say "ok" if /^d.*e$/i'
Done
ok
Dish
Dome
ok
Death

STDINから読み取り、行が一致した場合はsaysを読み取ります。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
于 2012-11-20T17:25:21.093 に答える
2

私はperlの質問に答えることはめったにありませんが、これでうまくいくと思います。

my @words = ...;
@words = grep(/^d.*e$/i, @words);

grepは、正規表現を使用して単語をフィルタリングします。

于 2012-11-20T17:25:56.157 に答える
2

どうですか:

#!/usr/bin/perl -Tw

use strict;
use warnings;

for my $word (@ARGV) {

    if ( $word =~ m{\A d .* e \z}xmsi ) {

        print "$word\n";
    }
}
于 2012-11-22T20:56:32.423 に答える