仅匹配反正则表达式的结果

时间:2017-03-15 15:18:23

标签: regex bash

我想保护postfix(已经受到保护,但是......你知道..)因为我从日志中看到许多域尝试登录它。

我已经为ssh使用fail2ban了,我想创建一个正则表达式来匹配坏域并禁止它们。

我所知道的是,来自Google和localhost的所有内容都是安全的。 我试图反转我创建的这个正则表达式,但我在添加localhost异常和从搜索“google”排除时都遇到了问题。

你会在regexr(dot)com网站找到所有HERE

我真的很感谢你的帮助!

更新: 我希望我能将这两个答案都标记为已接受。我接受我选择的那个,因为这个人详细解释了他的正则表达式。 虽然,我的技能很差,而且我更了解其他解决方案。 它们都按预期工作,谢谢你们!

2 个答案:

答案 0 :(得分:1)

我认为你会寻找以下正则表达式:

\b(connect\sfrom)\s(?!(.*?\.)?google)(?!localhost)[^\[]*
  • \s代表一个空白(这比你的点更窄)。
  • (.*?\.)?google表示匹配“google”或任何“subdomain.google”组合。问号使正则表达式非贪婪(尽可能小)
  • (?!A)(?!B)是多重否定前瞻。问题的实质
  • [^\[]*表示匹配最长的(“贪婪”)字符串,直到'['发生。

简而言之:您正在寻找(?!A)(?!B)

答案 1 :(得分:1)

您可以在字符串中间使用否定前瞻

\b(connect.from)(?!.*(localhost|google)).*