如何在Perl(或C ++)中返回以某些字符开头和结尾的所有字符?

时间:2012-11-20 17:23:01

标签: c++ string perl input io

注意:我在Linux上运行Perl 5

我正在做一个项目,我必须输入几个单词,然后返回以“d”开头并以“e”结尾的单词。我没有使用预先完成的列表,例如我输入控制台 Done,Dish,Dome和Death 。我希望它返回 Done and Dome ,但不是其他的话。我希望在Perl中获得如何执行此操作的帮助,但如果Perl无法解决问题,C ++会有所帮助。

4 个答案:

答案 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";
    }
}