我正在尝试将域分成不同的类别(子域、域、TLD)并且遇到了麻烦..
我想不出一种方法来匹配任意数量的子域并且不超过我的域或 TLD 数学。我正在使用 PCRE 正则表达式。
当前正则表达式:
\s(?:(?<subdomain>[a-z0-9\-]*){0,1}\.){0,3}(?<domain>(?>([a-z0-9\-]+)))\.(?<tld>[a-z\.]{2,6})\s
数据集:
apple.orange.banana.clevername.co.uk
strawberry.apple.orange.banana.clevername.co.uk
tangerine.com.au
simple.com
注意:域前后都有空格,它们总是小写。
此数据如何匹配的示例:
apple.orange.banana.clevername.co.uk
子域:apple.orange.banana
域:google顶级域名
:co.uk
如果我将另一个水果添加到子域(strawberry.apple.orange.banana.clevername.co.uk),匹配将失败。如果我将子域正则表达式的 {0,3} 修改为更高数量或无限数量的匹配,它会变得过于贪婪,并且我不再得到域/tld 的正确匹配。这个例子:
修改正则表达式:
\s(?:(?<subdomain>[a-z0-9\-]*){0,1}\.){0,5}(?<domain>(?>([a-z0-9\-]+)))\.(?<tld>[a-z\.]{2,6})\s
结果与新的正则表达式匹配:
草莓.苹果.橙.香蕉.聪明名字.co.uk
子域:strawberry.apple.orange.banana.clevername
域:
tld:co.uk
我确信正则表达式也不是最有效的,因此我们将不胜感激任何帮助或建议。谢谢!