2013-05-28 110 views
0

我試圖創建一個C#程序,消除所有如下前綴和後綴,並返回只是一個域的根詞:正則表達式的問題在C#

​​3210

我做這個用下面的代碼:

originalDomain = stripChars.Aggregate(originalDomain, (current, repl) => Regex.Replace(current, repl, @"", RegexOptions.IgnoreCase)); 

這似乎在幾乎所有情況下工作。然而,今天,我發現,設置「originalDomain」到「NameCheap.com」不回:

NameCheap 

像它應該,而是:

NCheap 

任何人都可以看到這一點,並告訴我發生了什麼問題?任何幫助,將不勝感激。

+2

我認爲它與.me ....匹配ame。 – iandotkelly

回答

3

我知道這並不直接回答你的問題,但考慮到你所要完成我會建議您嘗試像這樣的具體任務:

Uri uri = new Uri(originalDomain); 
originalDomain = uri.Host; 

編輯:

如果你的輸入可能不包含您可以使用URI製造商的方案在this post

var hostName = new UriBuilder(input).Host 

希望牛逼notied他的幫助。

+0

我遇到的問題是,有時域名有http://,有時是ftp://,有時甚至沒有。所以我需要一個捕獲所有的剝離。當我嘗試使用上面的代碼時,如果沒有http://,它會給我一個錯誤「URI的格式無法確定」。有任何想法嗎? – Jeagr

13

這是正常的:正則表達式中的點意味着任何字符。

因此,.me匹配ameNameCheap

用反斜線將點擊出來。

此外,您最好使用專用URI API進行此類操作。

+0

這是Jay在下面提供的內容嗎? – Jeagr

+1

是的,確切地說。 Java爲此擁有'URI'。你應該使用它,因爲它會爲你解析URI並在每個場景中做正確的事情。你所要做的就是在主機部分工作。 – fge

0

試試這個:

var stripChars = new List<string> {"http://", "https://", "www[.]", "ftp[.]", "[.]com", "[.]net", "[.]org", "[.]info", "[.]co", "[.]me", "[.]mobi", "[.]us", "[.]biz"}; 

的 ''正則表達式中的字符是特殊的,它代表任何字符。這是逃避它的一種方法。

但是,正如其他人所說,您目前的URL處理方法很脆弱,您應該探索其他解決方案。理想情況下,您希望使用能夠真正理解如何解析URL語法的內容。