正则表达式 - 和不匹配

时间:2013-05-16 19:24:38

标签: regex pcre regex-negation

试图让这个正则表达式工作。

[a-z0-9-\.]+(?!.in-addr.arpa*$)

样本 -

sdfgsed.co.in //shall match
1.1.1.1.in-addr.arpa //shall not match
fgsagf.co.ru //shall match
agfasfdg21.cn //shall match 

编辑 -

(?i)([a-z0-9-\.]{3,}\.(?!us|com|net)[a-z]{2})+$(?<!\.in-addr\.arpa)\x00

我尝试了这里提供的答案。正则表达式在数据包中搜索为域名提出的DNS请求.com .net。组织TDL。任何其他域名都应匹配,并且以.in-addr.arpa结尾的任何反向IP查找请求都不应匹配。名称以十六进制值NULL结尾。名称可以是数据包中的任何位置。

在数据包有效负载中搜索,示例 -

27.5.17.50.in-addr.arpa //reverse IP look up, shall not match
abcd.com // .com TDL shall not match
hacker.ru //shall match
badguy.com.cn //shall match

2 个答案:

答案 0 :(得分:3)

您可以使用后视断言:

^[a-z0-9-\.]+$(?<!\.in-addr\.arpa)

答案 1 :(得分:0)

试试这个:

^[a-z0-9-]++(?>\.(?!in-addr\.arpa$)[a-z0-9-]++)++$