1

注意:我在 Linux 上运行 Perl 5

我目前正在做一个项目,我必须输入几个单词,然后返回以“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 回答