1

php/mysql でメールアドレスからウェブサイト名を取得する方法。爆発は、db 内の数千のデータに対して実行する必要があるため、ここではコストがかかりすぎます。

original data
test@example.com
test@example1.com

needed data
example.com
example1.com
4

6 に答える 6

3
function getDomain( $email ) {
    return substr( $email, strpos( $email, '@' ) + 1 );
}

$website = getDomain( 'test@example.com' );
于 2012-05-31T16:01:59.073 に答える
1

を使用して @ のインデックスを見つけ、 を使用しstrrposて残りの部分を部分文字列にしsubstrます。

$atpos = strrpos($eaddress, '@');
$domain = substr($eaddress, $atpos + 1);
于 2012-05-31T16:00:37.300 に答える
1

strposを使用して を検索し@substrを使用してその後の部分を取得します。

于 2012-05-31T16:00:41.017 に答える
1

データベースにメールの長いリストがある場合は、Web サーバーではなくデータベースから Web サイトをトリミングすることをお勧めします。クエリは次のようになります。

SELECT SUBSTRING_INDEX(email_field, '@', -1) FROM email_table;

-1のため、@が最初に出現した後に右側の文字列が返されます。

役立つことを願っています

于 2012-05-31T16:11:07.480 に答える
1
foreach(... as $email) {
  $domains[] = substr($email, strpos('@', $email) + 1);
}

strposこれは問題なく機能するはずです。行に @ 記号が含まれていないことを示す falseを返すための検証がないことに注意してください。

于 2012-05-31T16:03:15.437 に答える
0

ちょっと違うこと:preg_matchドメイン名の取得:

<?php
  $address = array("test@example.com","test@example.co.uk","test2@ez.example.com");
  foreach ($address as $email) {
   preg_match(";\b.+@([a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,}))\b;", $email,$matches);
   echo $matches[1];
   echo "\n";
  }
?>

出力:

example.com
example.co.uk
ez.example.com
于 2012-05-31T16:15:24.393 に答える