Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
输入域名的PHP解析文本区(由空格、逗号、换行符分隔)_Php_Regex_Dns - Fatal编程技术网

输入域名的PHP解析文本区(由空格、逗号、换行符分隔)

输入域名的PHP解析文本区(由空格、逗号、换行符分隔),php,regex,dns,Php,Regex,Dns,对于我的用户,我需要提供一个屏幕,他们可以在一个文本区域中输入多个域名。用户可以将域名放在不同的行上,或者用空格或逗号(甚至可能是分号——我不知道!) 我需要解析和识别带有扩展名的单个域名(将是.com,其他任何内容都可以忽略) 用户输入可以是: asdf.com qwer.com 和/或 wqer.com,gwew.com 和/或 ertert.com gdfgdf.com 没有人会像www.abczone.com那样输入3级域,但如果他们输入,我只对提取abczone.com部分感兴趣。(我

对于我的用户,我需要提供一个屏幕,他们可以在一个文本区域中输入多个域名。用户可以将域名放在不同的行上,或者用空格或逗号(甚至可能是分号——我不知道!)

我需要解析和识别带有扩展名的单个域名(将是.com,其他任何内容都可以忽略)

用户输入可以是:

asdf.com

qwer.com

和/或

wqer.com,gwew.com

和/或

ertert.com gdfgdf.com

没有人会像www.abczone.com那样输入3级域,但如果他们输入,我只对提取abczone.com部分感兴趣。(我可以有一个单独的正则表达式来验证/提取每个正则表达式)。

这样做:

(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b)
查找字母的所有序列,后跟字母、数字或连字符,后跟
.com
,然后是分词

(您需要最后一位来防止从
bim.command.com
拾取
bim.com

Python测试用例,因为我手头没有PHP测试环境:

DATA = "asdf.com\nx-123.com, gwew.com bim.command.com 123.com, x_x.com"
import re
print re.findall(r'(\b[a-zA-Z][a-zA-Z0-9-]*)(?=\.com\b)', DATA)
# Prints ['asdf', 'x-123', 'gwew', 'command']

在这里,如果您想:

\b([a-zA-Z][0-9a-zA-Z\-]{1,62})\.com\b

差不多了,但是:1)域名不能以数字开头,2)域名不能包含超过63个字符,3)域名不能包含“u”。@RichieHindle:另外,为什么.com在非捕获组中?在我看来,没有必要这么做。谢谢大家!我对它做了一些修改,加入了.com部分,使它能够与php一起工作——但它似乎工作得很好!!!再次感谢!这里是我使用的:preg_match_all('/(\b[a-zA-Z][a-zA-Z0-9-]*)\.com\b/',…)不幸的是,对于“this-domain-name-is-longer-than-63-characters-and-this-not-valid.com”,这同样失败,返回“domain-name-is-longer-than-63-characters-ths-that-not-valid-valid”。@RichieHindle:我不同意,如果找到一个可以被视为有效域的子字符串。要么如此,要么什么都没有,而您的实现只返回一个不存在的域名。