2012-11-20 5 views
1

참고 : 나는 현재 내가 입력에 몇 마디를 한 후 "D"로 시작하고 "E"로 끝나는 단어를 반환하는 프로젝트를하고 있어요 리눅스Perl (또는 C++)에서 특정 문자로 시작하고 끝나는 모든 문자를 반환하는 방법은 무엇입니까?

에 펄 5를 실행 해요. 예를 들어, 콘솔에 입력 할 때 미리 목록을 사용하지 않았습니다. Done, Dish, Dome, Death. Done and Dome을 반환하고 싶지만 다른 단어는 사용하지 마십시오. Perl에서이 작업을 수행하는 방법에 대한 도움을 받기를 희망합니다. 그러나 Perl이 제대로 작동하지 않으면 C++이 도움이 될 것입니다. 펄 거의 사소한

답변

4

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

, 그것은 간단 할 수있다 (1) 그렙를 사용하는 펄 질문,하지만이 트릭을 생각합니다.

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

grep은 정규 표현식을 사용하여 단어를 필터링합니다.

+0

당신이 단어를 언급, 값, 나는이 같은 명령을 사용하여 값을 출력 할 수있다 ...? print "$ words는 d와 e로 시작합니다. \ n \ n"; – sharksfan98

+0

btw이면, 어떤 스 니펫에도'<'가 필요하지 않습니다. '^ d. * e $'도 Perl에서 작동합니다. – ikegami

3

는 : 라인이 일치하는 경우

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

ok을 STDIN에서 읽고 say의. 정규 표현식을 디버깅 할 때 유용합니다. 당신은 출력 일치하는 라인에 원하는, 그래서 words이 단어 파일의 이름있는 동안 당신은 단순히 say

$ perl -nlE 'say if /^d.*e$/i' words 

에 의해 say "ok"을 대체 할 수있다. 그것은 마술처럼 그 선을 읽습니다. 그 정규식 검색 짧은 설명 :

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

2

자주는 아니지만 가끔 내가 대답 : 당신이 리눅스를 사용하고 있기 때문에

^ # start of the line 
d # the literal character 'd' (case-insensitive because of the i switch) 
.* # everything allowed here 
$ # end of the line 
2

방법에 대해 :

#!/usr/bin/perl -Tw 

use strict; 
use warnings; 

for my $word (@ARGV) { 

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

     print "$word\n"; 
    } 
} 
관련 문제