以下のコードを利用することで、サブドメインを除いた形で、メールアドレスからドメインを抜き出すことができます。
※ブランドTLDは処理出来ません(ブランドTLDは別途処理方法を検討する必要があります)
<?php
function get_domain($email) {
// メールアドレスからドメインのみ抜き出し
$domain = preg_replace('/^.+?@(.+?)$/i', '${1}', $email);
// 地域型JPドメインの抜き出し
$pattern = '/^.*?((pref|metro|pref|city|town|vill)\..+?\.(hokkaido|aomori|iwate|miyagi|akita|yamagata|fukushima|ibaraki|tochigi|gunma|saitama|chiba|tokyo|kanagawa|niigata|toyama|ishikawa|fukui|yamanashi|nagano|gifu|shizuoka|aichi|mie|shiga|kyoto|osaka|hyogo|nara|wakayama|tottori|shimane|okayama|hiroshima|yamaguchi|tokushima|kagawa|ehime|kochi|fukuoka|saga|nagasaki|kumamoto|oita|miyazaki|kagoshima|okinawa|lg)\.jp)$/i';
if (preg_match($pattern, $domain)) {
return preg_replace($pattern, '${1}', $domain);
}
// 属性型ドメインの抜き出し
$pattern = '/^(.*?)(\.(co|or|ne|ac|ed|ed|go|gr|lg|com|net|org|mil|edu|int|idv)\.(is|ie|az|ac|af|us|as|vi|ae|dz|ar|aw|al|am|ai|ao|ag|ad|ye|uk|gb|io|vg|il|it|iq|ir|in|id|ug|ua|uz|uy|ec|eg|ee|sz|et|er|sv|eu|au|at|ax|om|nl|gh|gg|gy|kz|qa|um|ca|cv|ga|cm|gm|kh|mk|mp|gn|gw|cy|cu|cw|gr|ki|kg|gt|gp|gu|kw|ck|gl|cx|gd|hr|ky|ke|ci|cc|cr|km|co|cg|cd|sa|gs|ws|st|bl|zm|pm|sm|mf|sl|dj|gi|je|jm|ge|sy|sg|sx|zw|ch|se|sd|sj|es|sr|lk|sk|si|sc|gq|sn|rs|kn|vc|sh|lc|so|su|sb|tc|th|kr|tw|tj|tz|cz|td|cf|cn|tn|kp|cl|tv|dk|de|tg|tk|do|dm|tt|tm|tr|to|ng|nr|na|aq|nu|ni|ne|jp|eh|nc|nz|np|nf|no|hm|bh|ht|pk|va|pa|vu|bs|pg|bm|pw|py|bb|ps|hu|bd|tl|pn|fj|ph|fi|bt|bv|pr|fo|fk|br|fr|gf|pf|tf|bg|bf|bn|bi|vn|bj|ve|by|bz|pe|be|pl|ba|bw|bq|bo|pt|hk|hn|mh|mo|mg|yt|mw|ml|mt|mq|my|im|fm|za|ss|mm|mx|mu|mr|mz|mc|mv|md|ma|mn|me|ms|jo|la|lv|lt|ly|li|lr|ro|lu|rw|ls|lb|re|ru|wf))$/i';
if (preg_match($pattern, $domain)) {
$tmp = preg_replace($pattern, '${1}', $domain);
$tmp2 = preg_replace($pattern, '${2}', $domain);
if (substr_count($tmp, '.') > 0) {
$tmp = substr($tmp, strrpos($tmp, '.') + 1, strlen($tmp2));
}
return $tmp . $tmp2;
}
// その他ドメインの抜き出し
$tmp = substr($domain, 0, strrpos($domain, '.'));
if (substr_count($tmp, '.') > 0) {
$tmp = substr($tmp, strrpos($tmp, '.') + 1, strlen($tmp));
}
$tmp2 = substr($domain, strrpos($domain, '.'), strlen($domain));
return $tmp . $tmp2;
}