你的正則表達式有點多餘,因爲你或者某些已經包含在其他或塊中的東西。
我只是簡化你不得不
(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}
什麼和它的作品就好了... ...
我不知道爲什麼你允許的字符有\我敢肯定\是不允許在主機名中。
你的問題是,你或|打破東西像這樣...
[A-Za-z0-9\\-]+
或
[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}
或
\*
其中的評註者說的話,包括 「 - 」 在第2塊。
因此,也許你打算
^((?:[A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3})\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\*)$
但是第一兩個或運算項目將是多餘的,因爲+ {包括1-3}。
即。 [A-Za-z0-9 \ - ] +也會匹配任何匹配的內容[A-Za-z0-9] {1,3}
您可以使用此工具來幫助測試您的Regex: http://regexpal.com/
我個人認爲,每個開發者都應該有regexbuddy
以上,雖然它的工作原理將允許非有效主機名正則表達式。
它應該被修改爲不允許在第一個字符中標點符號。
所以它應該被修改看起來像這樣。
(?:[A-Za-z0-9][A-Za-z0-9-]+\.)(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}
同樣在理論上,主機不允許以連字符結尾。
它是如此複雜我會使用正則表達式來捕獲部分,然後使用Uri.CheckHostName來實際檢查Uri是否有效。
或者你也可以使用由CodeCaster
建議的正則表達式我覺得你的問題是,'-'一直未獲準......這麼說,我的正則表達式是不是很大。 –
爲什麼重新發明車輪,不好?有一些函數像['Uri.CheckHostName()'](http://msdn.microsoft.com/en-us/library/system.uri.checkhostname.aspx)(假設[here](http:// stackoverflow.com/questions/967516/best-way-to-determine-if-a-domain-name-would-be-a-valid-in-a-hosts-file))和一個可怕的正則表達式[here] (http://stackoverflow.com/questions/106179/regular-expression-to-match-hostname-or-ip-address)。 – CodeCaster