2012-04-16 69 views
3

大家好所有正則表達式新手在這裏。,正則表達式IPv6驗證和可選的方括號?

我想寫一個驗證IPv6地址的正則表達式。我還沒有添加端口部分,我想先獲取地址部分。

這是我到目前爲止有:

\\[?(?:[:0-9A-Fa-f]+)\\]? 

這使得開啓和關閉支架可選。但正如你所看到的,他們是獨立的可選項。是否有正則表達式要求開放和結束括號既不

回答

2

正則表達式是一個很好的字符串模式匹配工具,但是您在這裏遇到了一個弱點。匹配成對的括號會變得棘手。

在更復雜的情況 - 即試圖讀取程序代碼時 - 該解決方案是不使用正則表達式可言,而是利用正確的代碼分析器。

即使是相當簡單的情況下,可能會非常棘手回答,因爲涉及的正則表達式語法,可以說是相當毛茸茸的,還因爲更先進的正則表達式的功能就是這樣,不同的實現可以使用不同的語法。 This question可能會提供一些提示,說明如何使用它以及可能使用的不同語法。

然而,在你的情況下,這個問題是不是太複雜了,一個相當簡單的解決方案提出了自己:只要有需要兩個支架或支架都不整個表達式整個表達式匹配。換句話說,重複你表達的主要部分兩次,一次用支架,一次不帶,併爲他們之間or管道:

\(\[(?:[:0-9A-Fa-f]+)\])|(?:[:0-9A-Fa-f]+)\ 

希望有所幫助。

+0

經過一番調查後,我得出了同樣的結論,我只需要複製那部分正則表達式。謝謝你的協助! – 2012-04-16 20:45:06