2012-02-29 2 views

답변

1

를 사용하여 이메일 :: 주소. 이러한 일은 단순한 재가 제대로 수행하기에는 너무 어려워요. 죄송합니다. 가까이서 op를 읽지는 않았지만이 코드는 이메일을 분할하는 데 유용합니다.

use strict; 
use warnings; 
use Email::Address; 

my $line = '[email protected];[email protected]'; 
my @addresses = Email::Address->parse($line); 
for my $address (@addresses) { 
    print $address->format, "\n"; 
} 
+0

사용하기 전에 Email :: Address가 설치되어 있어야합니다. 기본적으로 존재하지 않습니다. 그렇지 않으면 모든 이메일 인증 작업을위한 멋진 모듈입니다. – Jassi

2

Perl의 한정 기호는 기본적으로 욕심이 있습니다. 그것은 그들이 가능한 한 많이 붙잡을 것이라는 것을 의미합니다. 두 번째 부분은 더 @이 없다고 100 % 확신 할 경우

($username, $domain) = ($string =~ /(.*)@(.*)$/); 

, 당신은 사용할 수 있습니다 :

($username, $domain) = ($string =~ /(.*)@([^@]*)$/); 
+1

마지막 줄에 뭔가가 있습니다. 욕심 많은 검색을 사용하면 아무런 사용이 없다고 생각합니다. 따라서 첫 번째 코드와 두 번째 코드는 동일한 효과를냅니다. 감사합니다 – Jassi

6

는 그냥 greedyness를 사용

은 당신이 원하는 것은 간단하다 :

/(.*)@(.*)$/ 

첫 번째 부분은 @이 발생할 때까지 가능한 한 많이 소요됩니다. 마지막 부분은 줄 끝까지 @ 뒤에 모든 것을 취합니다. perlre에서

+0

얼마나 효율적입니까? 나는 똑같은 것을 썼지 만 파일로부터의 모든 메일 ID를 걸러 낼 수있는 더 나은 솔루션을 찾고있었습니다. 감사합니다 Koneark for the regex :) – Jassi

+1

'얼마나 효율적입니까'에 대한 유일한 진정한 대답은 '벤치마킹'이지만, 그런 간단한 정규 표현식을 컴파일하는 것이 문제가되지 않아야합니다. 펄은 실제적으로 regexps를 위해 만들어졌습니다. – Konerak

8
my ($username, $domain) = $str =~ /(.*)@(.*)/; 

더 많은 정보 : 기본적으로

는, 정량화 서브 패턴은 즉, "욕심", 그것은 것입니다 가능한 경기를 여러 번 (특정 시작 위치 지정) 동안 나머지 패턴은 여전히 ​​일치합니다.

2
$str='[email protected]@[email protected]'; 
$user=qw(); 
$domain=qw(); 
while($str=~m/\@/g){ 
    $user=$`; 
    $domain=$'; 
} 
print "user -> $user\n"; 
print "domain->$domain\n"; 
+0

'$ user'와'$ domain'을 초기화하는 것이 왜 힘들지는 않은지 생각해보십시오. –

+0

특수 변수를 잘 사용합니다. 좋은 분 – Jassi

+0

고마워. u가 strict 및 warnings 모듈을 둘 다 사용하는 경우 오류나 경고가 발생하도록 초기화해야합니다. – Jassi