![如何定义正则表达式来解析域名的 TLD?](https://linux22.com/image/1374280/%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%9D%A5%E8%A7%A3%E6%9E%90%E5%9F%9F%E5%90%8D%E7%9A%84%20TLD%EF%BC%9F.png)
我有以下情况:-
....wasasa.org.pk
wawwwsasa.msn.com
....ttrt .....ddd.dd www.edu.pk
.ru
我只想选择以下
org.pk
.com
edu.pk
我写的可能的正则表达式是
[az]+.(.*)(?=\s+)
问题在于它仅挑选 dd 部分。
使用最新的正则表达式我发现以下问题:-
....wasasa.org.pk fgf wawwwsasa.msn.com fgf
....ttrt .....ddd.dd www.iffn.pk fgf
www.ru ff www.ru.com fgfgf
.ru fgf
它将停止匹配空格后的任何内容,例如 www.ru.com fgfgs。正则表达式应该适用于空格,甚至适用于没有空格的情况。
答案1
也许可以尝试这样的事情?
((?:edu|org)?\.[a-z]+)$
答案2
如果我确实理解了这个问题,awk 可以使用以下方法完成:
awk '{split($0,uri,"/");c=split(uri[3],domain,".");
domain[1]=="www"?a=3:a=2; for (i=a;i<=c;i+=1){
printf("%s%s"),domain[i],i==c?"\n":"."}}'
使用示例:
printf "%s\n" 'https://google.com/search?q=google' 'https://www.google.co.uk/foo' | awk '{split($0,uri,"/");c=split(uri[3],domain,"."); domain[1]=="www"?a=3:a=2; for (i=a;i<=c;i+=1){ printf("%s%s"),domain[i],i==c?"\n":"."}}'
输出:
com
co.uk