피어가 마지막 @을 어떻게 찾을 지 질문했습니다.이메일 분할을위한 Perl의 정규 표현식
예 :
[email protected]@[email protected]
그래서 도메인 이름과 같은 이름으로 [email protected]@aliencoders.com
및 ..coding.com
를 표시해야합니다. 원하는 출력을 얻으려면 Perl에 라이너 정규 표현식이 하나 있습니까?
피어가 마지막 @을 어떻게 찾을 지 질문했습니다.이메일 분할을위한 Perl의 정규 표현식
예 :
[email protected]@[email protected]
그래서 도메인 이름과 같은 이름으로 [email protected]@aliencoders.com
및 ..coding.com
를 표시해야합니다. 원하는 출력을 얻으려면 Perl에 라이너 정규 표현식이 하나 있습니까?
를 사용하여 이메일 :: 주소. 이러한 일은 단순한 재가 제대로 수행하기에는 너무 어려워요. 죄송합니다. 가까이서 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";
}
Perl의 한정 기호는 기본적으로 욕심이 있습니다. 그것은 그들이 가능한 한 많이 붙잡을 것이라는 것을 의미합니다. 두 번째 부분은 더 @
이 없다고 100 % 확신 할 경우
($username, $domain) = ($string =~ /(.*)@(.*)$/);
, 당신은 사용할 수 있습니다 :
($username, $domain) = ($string =~ /(.*)@([^@]*)$/);
마지막 줄에 뭔가가 있습니다. 욕심 많은 검색을 사용하면 아무런 사용이 없다고 생각합니다. 따라서 첫 번째 코드와 두 번째 코드는 동일한 효과를냅니다. 감사합니다 – Jassi
는 그냥 greedyness를 사용
은 당신이 원하는 것은 간단하다 :
/(.*)@(.*)$/
첫 번째 부분은 @이 발생할 때까지 가능한 한 많이 소요됩니다. 마지막 부분은 줄 끝까지 @ 뒤에 모든 것을 취합니다. perlre에서
my ($username, $domain) = $str =~ /(.*)@(.*)/;
더 많은 정보 : 기본적으로
는, 정량화 서브 패턴은 즉, "욕심", 그것은 것입니다 가능한 경기를 여러 번 (특정 시작 위치 지정) 동안 나머지 패턴은 여전히 일치합니다.
$str='[email protected]@[email protected]';
$user=qw();
$domain=qw();
while($str=~m/\@/g){
$user=$`;
$domain=$';
}
print "user -> $user\n";
print "domain->$domain\n";
사용하기 전에 Email :: Address가 설치되어 있어야합니다. 기본적으로 존재하지 않습니다. 그렇지 않으면 모든 이메일 인증 작업을위한 멋진 모듈입니다. – Jassi