使用tld列表进行域解析

时间:2016-07-12 17:24:31

标签: php regex

我正在使用以下正则表达式来解析域...

$pattern = "/(\w+)\.(co.uk|uk|com|edu|gov)/";

preg_match($pattern, "something.abc.co.uk", $matches);

如何在co.uk|uk|com|edu|gov的位置使用tld的文本文件/字符串,以便此正则表达式可用于验证多个tld。

请帮忙。感谢

2 个答案:

答案 0 :(得分:0)

你的意思是应该有一个列出所有有效域名的txt文件吗?如果是这样,你可以这样试试:

// valid_domains.txt

 co.uk|uk|com|edu|gov

// PHP file

/* Modified code starts */

$myfile          =  fopen("valid_domains.txt", "r") or die("Unable to open file!");
$valid_domains  =   fread($myfile,filesize("valid_domains.txt"));
fclose($myfile);

/*Modified code ends*/

$pattern        = "/(\w+)\.(".$valid_domains.")/";    // Modify this line
$result = preg_match($pattern, "something.abc.co.uk", $matches);

var_dump($result);       // int(1)

答案 1 :(得分:0)

这将读入一个文件,其中每个tld都在它自己的行上,清理它们并生成一个模式。

<?php
//read in the list of tlds
$list = file('listOfTLDs.txt');

//clean up list
array_walk($list, function(&$val){
    // remove leading/trailing whitespace/newlines
    $val = trim($val);
    // escape preg special characters
    $val = preg_quote($val, '/');
});

//make pipe separated list
$list = implode('|', $list);

//make the pattern
$pattern = "/(\w+)\.({$list})/";