2010-08-27 107 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