首页 > 解决方案 > RegEx:根据白名单查找域和子域

问题描述

我有这个清单:

something.microsoft.com
something.bing.de
somethingmicrosoft.com
something-bing.com
microsoft.com
bing.de

我的目标是过滤具有子域或根本没有子域的域。所以最后它应该是这样的:

something.microsoft.com
something.bing.de
microsoft.com
bing.de

正则表达式中应该有一个白名单,因此 SLD 和 TLD(分隔)只允许使用选定的子字符串。

这是我到目前为止所尝试的:

(?:.*)\.{0,1}(?:microsoft|bing)(?:\.de|\.com)
(?:.*\.){0,1}(?:microsoft|bing)(?:\.de|\.com)

如您所见,它还找到了一些东西 microsoft.com。我怎样才能实现我的目标?

标签: regex

解决方案


您可以使用

^(?:.*\.)?(?:microsoft|bing)\.(?:de|com)$

请参阅正则表达式演示详情

  • ^- 字符串的开始
  • (?:.*\.)?- 除换行符之外的任何字符的可选序列,尽可能多,后跟文字.字符
  • (?:microsoft|bing)-microsoftbing
  • \.- 一个点
  • (?:de|com)-decom
  • $- 字符串结束。

推荐阅读