解析域名

时间:2010-08-27 19:44:08

标签: c string

我正在通过strchr()最后一个字符串解析字符串。 (点)并倒数到那之前的点(如果有的话),然后我知道我有我的域名。

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

我可能获得的字符串是:

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

你明白了。我需要提取“domain.com”部分。

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

感谢您的帮助

编辑:

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

3 个答案:

答案 0 :(得分:2)

您的意思是strrchr()吗?

我可能会这样做:

  1. strrchr获取字符串中的最后一个点,在此处保存指针,用NUL('\0')替换点。
  2. strrchr再次让 next 到字符串中的最后一个点。 之后的字符是您要查找的名称的开头(domain.com)。
  3. 使用您在#1中保存的指针,将点放回您设置的位置NUL。
  4. 请注意,名称有时可以以点结尾,如果这是输入集的有效部分,则需要对其进行说明。

    编辑:为了处理example.co.uk和其他方面所需的灵活性,上述功能将采用一个额外的参数来告诉它从结尾处提取多少组件。名。

    你可以自己决定如何确定要提取的组件数量 - 正如Philip Potter在下面的评论中提到的那样,这是一个难题。

答案 1 :(得分:2)

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

在已经非常讨厌的代码的上下文中,我认为让它变得不那么讨厌并提供解析域名等的良好工具的好方法是使用PCRE或类似的库来表示正则表达式。例如,如果你还想验证tld是否存在,这肯定会帮助你。

最初学习可能需要一些努力,但如果你需要对现有的匹配/解析代码进行更改,或者为字符串匹配创建更多代码 - 我认为regex-lib可以在长期。特别是对于更高级的匹配。

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

答案 2 :(得分:0)

不确定C的味道,但您可能希望使用“。”对域进行标记。作为分隔符。

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

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

如果您只想要最后2个节点,那么请使用上面的内容并获取最后两个令牌。