2010-08-27 70 views
1

我解析域名由字符串strchr()最后一个。 (点),并计算回到之前的点(如果有的话),然后我知道我有我的域名。解析域名

这是一个相当讨厌的代码,我想知道如果有人有更好的方法。

可能的字符串,我可能得到的是:

  • domain.com
  • something.domain.com
  • some.some.domain.com

你的想法。我需要提取“domain.com”部分。

在你告诉我去谷歌搜索之前,我已经做了。没有答案,所以我在这里问。

谢谢您的帮助

编辑:

我该字符串包含一个完整的主机名。这通常是以whatever.domain.com的形式,但也可以采取其他形式,正如有人提到它也可以有whatever.domain.co.uk。无论哪种方式,我需要解析主机名的域名部分:domain.com或domain.co.uk

+9

ccTLD呢?你需要'foo.co.uk'或者'co.uk'吗? – 2010-08-27 19:45:37

+0

好点!谢谢你指出一个出来 – Jessica 2010-08-27 19:55:11

+2

@Justin Ethier虽然我很欣赏错别字的修正和一种让我的问题更具可读性的方法,但编辑这个问题时没有意义,这很烦人。 – Jessica 2010-08-27 19:59:27

回答

2

您的意思是strrchr()

,我可能会做处理这个:

  1. strrchr拿到最后一个点的字符串中,这里保存的指针,用NUL('\0')更换点。
  2. strrchr再次获得下一个以最后一个点在字符串中。 之后的字符这是您正在查找的名称的开头(domain.com)。
  3. 使用您保存在#1中的指针,将点放回您设置的位置NUL。

请注意,名称有时可能以点结尾,如果这是您输入集的有效部分,则需要对其进行解释。

编辑:要处理你example.co.uk和其他方面所需要的灵活性,上述功能将需要一个额外的参数告诉它有多少成分从名称的末尾提取。

由于Philip Potter在下面的评论中提到,这是一个难题,因此您可以自行决定如何确定要提取多少组件。

+0

让我试试,但是正如菲利普波特提到的那样,我该如何处理domain.co.uk? – Jessica 2010-08-27 20:01:49

+0

@Jessica:你需要更清楚地定义你想要的。例如,.jp,.uk和.au具有二级通用域:co.uk,co.jp,com.au.但是.de,.es,.be,.tk等其他人不会:amazon.de等。你究竟想要什么?如果你想提取域中最后一个“有意义”的部分,这是一个难题。 – 2010-08-27 20:11:39

+0

查看编辑问题 – Jessica 2010-08-27 20:13:01

0

不确定C是什么味道,但您可能想使用“。”标记化域。作为分隔符。

试试这个:http://www.metalshell.com/source_code/31/String_Tokenizer.html

至于域名,不知道你的最终目标是什么,但域可以有很多很多节点,你可以有一个域名foo.baz.biz.boz。 bar.co.uk.

如果你只是想要最后2个节点,然后使用上面,并获得最后两个令牌。

+0

一个域名只能有255个八位字节,不完全“无限”... – bstpierre 2010-08-27 19:54:23

+0

只是name.something .something可以.com,.net。 etc。或者.co.uk等形式 – Jessica 2010-08-27 19:56:53

+0

我以前用strtok试过,但是我需要继续阅读一个保存的字符串......除非你知道一个好的方法来做到这一点 – Jessica 2010-08-27 19:57:37

2

这并不是问题本身的回复,但对于替代方法的想法:

在已经非常讨厌代码的情况下,我要说的却是一个很好的方式,以使它不那么讨厌,并提供解析域名和类似内容的好工具 - 就是使用PCRE或类似的库来进行正则表达式。例如,如果您还想验证tld是否存在,那么这将明确地帮助您。

最初可能需要一些努力来学习,但是如果您需要对现有的匹配/解析代码进行更改,或者为字符串匹配创建更多的代码 - 我认为regex-lib可能会简化这个过程长远来看。尤其适用于更高级的匹配。

我记得支持正则表达式的另一个库是glib。

+0

谢谢。我会definatelly尝试正则表达式,但我不能使用任何外部。 – Jessica 2010-08-28 10:13:42

+0

该项目目前与什么链接?只有Libc? – Kvisle 2010-08-28 15:57:29

+0

是的。只有标准C,就是这样。 – Jessica 2010-08-30 15:22:44