C# 确定何时使用正则表达式提供多个域

C# 确定何时使用正则表达式提供多个域,c#,regex,dns,C#,Regex,Dns,我正在开发一个C#表单,其中一个用户提供两个主机的FQDN,此信息稍后用于安装某些功能,这些功能仅在两个FQDN位于同一域时有效。我最初在单独的字段中有两个主机名和一个域名,但这让用户感到困惑。基本上,我想检测这些FQDN字段中何时提供了不同的域。比如说- 有效输入: host1.domain1.example host2.domain1.example host1.domain1.example host2.domain2.example 无效输入: host1.domain1.examp

我正在开发一个C#表单,其中一个用户提供两个主机的FQDN,此信息稍后用于安装某些功能,这些功能仅在两个FQDN位于同一域时有效。我最初在单独的字段中有两个主机名和一个域名,但这让用户感到困惑。基本上,我想检测这些FQDN字段中何时提供了不同的域。比如说-

有效输入:

host1.domain1.example
host2.domain1.example
host1.domain1.example
host2.domain2.example
无效输入:

host1.domain1.example
host2.domain1.example
host1.domain1.example
host2.domain2.example

我想检测无效的输入,但这比我想象的要复杂。

遵循正则表达式会有所帮助。它满足您当前的文本要求。如果你认为你的文字会有变化,你可以做一些小的改变。如果你有任何问题,请告诉我

在右边的示例页面上,它描述了代码正在做什么,请参考该说明

正则表达式:
(?:\w+)\(\w+)(:\。\w+)*\n(?::\w+)(?:\。\w+)*

示例:

遵循正则表达式会有所帮助。它满足您当前的文本要求。如果你认为你的文字会有变化,你可以做一些小的改变。如果你有任何问题,请告诉我

在右边的示例页面上,它描述了代码正在做什么,请参考该说明

正则表达式:
(?:\w+)\(\w+)(:\。\w+)*\n(?::\w+)(?:\。\w+)*

示例:

用正则表达式解析域名将产生许多人们刚刚忘记的边缘情况。这就像在XML/HTML上使用正则表达式:不好。对于
www.dk
什么是域名?(它是
www.dk
)。对于
www.example.co.uk
域名是什么(它是
example.co.uk
)。等等。不,在所有一般情况下(例如
www.intranet.example.com
您想要的域名是什么?可能是
example.com
),等等,您不能首先拆分。因此,从您关心的TLD列表开始,提取这些TLD中的域(简单:domain=label.TLD),然后比较域。这也很困难,因为这些域通常是内部的,并且故意使用一些模糊的命名,所以我在“青色”到带破折号的TLD的任何地方都见过。这使得很难对用户可能拥有的TLD进行编目。由于这些FQDN将用于广告控制的Windows主机,我不担心剥离
www
,但有些FQDN可能不止一个简单的
host.domain.example
格式,因此这将导致问题。我可能会返回到主机名有两个字段,域只有一个字段,我会将它们组合起来用于FQDNs。用正则表达式解析域名会产生许多人们刚刚忘记的边缘情况。这就像在XML/HTML上使用正则表达式:不好。对于
www.dk
什么是域名?(它是
www.dk
)。对于
www.example.co.uk
域名是什么(它是
example.co.uk
)。等等。不,在所有一般情况下(例如
www.intranet.example.com
您想要的域名是什么?可能是
example.com
),等等,您不能首先拆分。因此,从您关心的TLD列表开始,提取这些TLD中的域(简单:domain=label.TLD),然后比较域。这也很困难,因为这些域通常是内部的,并且故意使用一些模糊的命名,所以我在“青色”到带破折号的TLD的任何地方都见过。这使得很难对用户可能拥有的TLD进行编目。由于这些FQDN将用于广告控制的Windows主机,我不担心剥离
www
,但有些FQDN可能不止一个简单的
host.domain.example
格式,因此这将导致问题。我可能会返回到主机名有两个字段,域只有一个字段,我会将它们合并为FQDNs。啊,抱歉,我第一次发布时的格式将我的条目增加到一行。根据帖子的格式,我明白你的意思了。经过编辑的原始帖子应该更准确地表达我的意思。更新了我的答案。看一看,如果它满足您的要求,请接受。谢谢您的更新。我还应该澄清,FQDN是在单独的字段中提供的,因此从技术上讲,这两个值之间没有换行符,而是作为两个单独的变量包含。它们是从my main.cs表单上的
FQDNpri
FQDNsec
表单中提取的,比如-
string FQDNPrimary=FQDNpri.Text.ToString();字符串FQDNSecondary=FQDNSec.Text.ToString()
所以我想获取FQDNPrimary和FQDNSecondary字符串,并将它们相互比较。我可以尝试以换行符分隔的格式重新存储它们,并测试该正则表达式。我相信我将不可避免地遇到的问题之一是当用户在其域中有额外的
字符时,例如,有时,我将在一个具有FQDN的开发环境中找到类似于
host.dev.domain.tld
。我想我只是让用户提供两个主机名,然后为域提供一个单独的字段,然后将它们合并为FQDN。谢谢你的建议,不过,这肯定是正确的。你不会的,我已经再次更新了正则表达式,并更新了示例。因此,您担心的是,如果域名以
abc.co.in
的形式出现,那么它就不会被抓取。现在我做了更改,它将接受域的多个扩展。看一看,让我知道它是否有效。如果是,请接受答案。如果没有,那么让我知道,我会看看需要更新什么。啊,抱歉,我第一次发布时的格式将我的条目增加到了一行。根据帖子的格式,我明白你的意思了。经过编辑的原始帖子应该更准确地表达我的意思。更新了我的答案。哈夫