寻找正则表达式异常以匹配DNS请求中的非TLD域

时间:2016-02-29 15:52:55

标签: regex

这是我需要使用正则表达式过滤的域名列表:

/([a-zA-Z0-9.][^])/g

它匹配所有字符,没有例外。我想过滤没有.com,.net或任何TLD的字符,所以正则表达式的工作原理如下:

zjpsmsmnijda -->match
zjpsmsmnijd01828282 -->match
zjpsmsmnijd.com -->not match
zjpsmsmnijd.net -->not match
hadjhajdhjdjad.com -->not match
jjsjsjjsjjs.com -->not match
qhwnnajskkalls.org -->not match
qhwnnajskkalls.net.in -->not match
qhwnnajskkalls.co.in -->not match
qhwnnajskkalls.ly -->not match
SHEYEKSISKKISIM -->match
SAHSJJASHASH1212937888 -->match
ABCHHSHHAJJSJJS.COM -->not match
HSHHJASJHSJHJSH.NET -->not match
hasjjashajshajshas.com --> not match
hsahsjahsjashjashja -->match
hshhhhsahsjahsjahsjashajshasjhssajh -->match

2 个答案:

答案 0 :(得分:1)

现在有一个非常list of TLDs(目前是1240),它增长得太快而无法跟上。你不希望正则表达式匹配这些。

(如果您真的想要匹配真实的TLD列表,请将该链接删除为哈希,从您的测试数据中提取潜在的TLD,并在哈希中查找它们。不要使用超过一千次更改的正则表达式! )

相反,我只是匹配看起来有效的任何内容:

/\.(?:[a-z]{2,}|XN--\w+)$/i

(这与有效的TLD相匹配。反转其结果以获得无效的TLD。)

这个键有两种模式。我先做第二次轮换。 Punycode用于国际化顶级域名,并且始终使用前导XN--格式化,然后是字母数字。否则,没有TLD包含数字,并且每个TLD都包含至少两个字母。

答案 1 :(得分:0)

如果我理解您的意图正确,您希望获得没有TLD等的域名Using this utility,您可以交互式地构建正则表达式。因此,要获得简单字符串列表:

/^[a-zA-Z0-9]+$/gm