最後に@if more than one
@ `が存在するかどうかをピアから聞いてきました。Perlで電子メールを分割するための正規表現
例:
[email protected]@[email protected]
だから、ドメイン名とユーザ名として[email protected]@aliencoders.com
と..coding.com
が表示されます。 希望の出力を得るためにPerlに1つのライナー正規表現がありますか?
最後に@if more than one
@ `が存在するかどうかをピアから聞いてきました。Perlで電子メールを分割するための正規表現
例:
[email protected]@[email protected]
だから、ドメイン名とユーザ名として[email protected]@aliencoders.com
と..coding.com
が表示されます。 希望の出力を得るためにPerlに1つのライナー正規表現がありますか?
使用するメールアドレス::。これらのことは簡単すぎて正しくやるのは難しいです。 oopsは、十分に近くで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の数値限定子は、デフォルトでは貪欲です。それは彼らができるだけ掴むことを意味します。
何をしたいことは簡単です:
($username, $domain) = ($string =~ /(.*)@(.*)$/);
あなたは2番目の部分は何@
を持っていないことが100%一定にしたい場合は、あなたが使用することができます。
($username, $domain) = ($string =~ /(.*)@([^@]*)$/);
最後の行には余分なものがあります。よく貪欲な検索と、私はそれが任意の使用があるとは思わない...ので、あなたの最初のコードと2番目のコードは同じ効果があります。おかげで – Jassi
だけgreedynessを使用します。
/(.*)@(.*)$/
最初の部分は@に遭遇するまでできるだけ多くなります。最後の部分は、@の後ろのすべてを行の終わりまで取ります。
my ($username, $domain) = $str =~ /(.*)@(.*)/;
詳細perlreの情報:
デフォルトでは、定量化サブパターンは、「貪欲」である、すなわち、できるだけそれ意志 一致何度でも(特定の開始位置を与えられる) つつあります残りのパターンが一致するようにします。
$str='[email protected]@[email protected]';
$user=qw();
$domain=qw();
while($str=~m/\@/g){
$user=$`;
$domain=$';
}
print "user -> $user\n";
print "domain->$domain\n";
電子メール::アドレスを使用する前にインストールする必要があります。デフォルトでは存在しません。それ以外の場合は、すべての電子メール検証作業のためのクールなモジュールです – Jassi