0

この形式の URL のリスト ( http://www.xyz.gov.ac.in)。すべてがこのように見えるわけではなく、通常のドメインを持つものもあります。ドット 3 つの URL からドメイン名を取得する方法がわかりません。私たちが持っているコードは、2 つのドット付きドメイン名に対して正常に機能しています。これが私たちが持っているコードです:

function get_domain($url)
{
  $pieces = parse_url($url);
  $domain = isset($pieces['host']) ? $pieces['host'] : '';
  if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
    return $regs['domain'];
  }
  return false;
}

echo get_domain($url) ;

上記のコードをどのように変更して、3 つのドット付きドメインとその他のタイプに対応できるでしょうか?

エコー結果はこの形式である必要がありますxyz.gov.ac.in

4

3 に答える 3

1

基本的に、できません。少なくとも、すべての「TLD」を持つルックアップ テーブルがないわけではありません。

たとえば、私の国 (オランダ) には.nlと があり.co.nlます。しかしwww.gov.nl、これは通常の Web サイトです (ドメインではないと自動的に判断できないことを説明しようとしていgov.ます)。そしてwww.edu.nl、存在しません。

それらを解析しようとする標準的な正規表現はwww.gov.nl、ドメインが実際には であるのに、ドメインが であることを示しますgov.nl。についても同じですedu.nl

目的を達成できる唯一の方法は、すべての TLD (およびサブ TLD) のリストを取得し、それを使用してそれらを解析することです。

Firefox と Chrome にはそのようなリストが実装されており (URL のドメイン名を色付けするため)、常に最新の状態に保たれていると思います。多分それらの情報源を見てください。

于 2012-04-23T13:07:52.473 に答える
0

代わりにこの正規表現を使用できるはずです

/(?P<domain>([a-z0-9][a-z0-9\-]{1,63}\.)+[a-z\.]{2,6})$/i
于 2012-04-23T12:07:12.207 に答える
0

これを試して:

/(^[\w|-]+\.)(?P<domain>([\w|-]+\.)+(\w+))/i    

これがお役に立てば幸いです。

于 2012-04-23T12:03:04.187 に答える