2014-02-25 2 views
0

(다른 질문은 죄송하지만 시험 응시)으로 바꿉니다.이메일 주소의 모든 인스턴스를 "@ example.com"

나는 STDIN에서 읽어야 할 파일이 있습니다. 그것은 본문에 텍스트와 많은 이메일을 가지고 있습니다.

"blah blah blah something [email protected] blah blah [email protected]". 

나는 모든 이메일 주소 도메인 이름을 "@ example.com"으로 바꾸고 싶습니다. 그래서 위는 다음과 같습니다.

"blah blah blah something [email protected] blah blah [email protected]" 

여기까지 코드가 있습니다.

#!/usr/bin/perl 

while($line = <STDIN>){ 
    $line =~ s/'@'+'.com'\s/"@example.com"/g; 

    print $line; 
} 
+0

힌트 : 특수 문자를 탈출, 작은 따옴표를 제거. 'perldoc perlre' – toolic

+0

흠. Perl 시험입니까? 정규 표현식을 이해하는 것은 먼 길입니다. 당신이 쓴 것은 나쁜 추측으로 보입니다. 당신이 할 수있는 일에 초점을 맞추어 안과 밖을 확실히 알아야합니다. 해킹 할 수없는 것들에 대한 지식을 향상시키는 데 시간을 낭비하지 마십시오. 마크를 크게 향상시키지 않습니다. – Borodin

답변

2
$line =~ s/(\S+)@\S+/$1\@example.com/g; 
+0

안녕하세요. $ 1을 perl로 설명 하시겠습니까? 나는 그것을 보았지만 결코 이해하지 못했다. – smushi

+0

정규 표현식의 LS (왼쪽)에는 캡처 된 그룹'(\ S +) '이 포함됩니다. 그래서 저는 공간 대신에 @ 기호의 왼쪽에 뭔가가 있다는 것을 강요 할 수 있습니다. 나는 또한 긍정적 인 lookbehind 단언을 사용할 수 있었다, 그러나 나는 그것이 당신의 경험의 이상일 것이라는 점을 계산했다. 캡쳐 된 각 그룹은's ///' 정규 표현식의 RS (오른쪽) 또는'm //'의 외부에 포함될 수있는 번호가 매겨진 변수 $ 1, $ 2, $ 3에 저장됩니다. 이 경우 $ 1이 새 전자 메일 도메인보다 우선되기를 바랍니다. – Miller

관련 문제