2013-07-31 54 views
4

我需要一個C#正則表達式來匹配IP子網,如「127.65.231」,但不匹配子網上的IP地址,如「127.65.231.111」。我發現這個正則表達式的IP地址:正則表達式來匹配IP子網

@「\ b \ d {1,3}。\ d {1,3}。\ d {1,3}。\ d {1,3 } \ b 「

,並在想我可以只刪除檢查最後一個字節,這樣的部分:

@」 \ b \ d {1,3} \ d {1。 ,3}。\ d {1,3} \ b「

但這與IP地址和子網都匹配。有人能幫忙嗎?

+2

IP地址在八位字節範圍從0到255你的正則表達式匹配無效的八位字節,如'400'。如果你想更準確一點,正則表達式會更復雜。 –

+0

是的,因爲@BrianStephens說你的正則表達式也會匹配999,這根本就不是有效的IP –

+0

[子網掩碼的正則表達式?]的可能重複(http://stackoverflow.com/questions/5360768/regular-expression-for -subnet-masking) – jason

回答

0
@"^\d{1,3}\.\d{1,3}\.\d{1,3}$" 

使用Line Anchors.添加^在您正則表達式的開頭和$結尾,驗證輸入的開始和結束。

這將匹配127.65.231但不127.65.231.111

+1

它也將匹配999.999.999這是無效的。 –

+0

@Eric Lippert,我現在從我的測試中看到,但是我將如何改變它以僅匹配有效的ip八位字節,而不是每個255以上? –

+0

只有256個。只需列出它們。 :) –

1

您可能會嘗試使用超前測量。另外,請逃脫.字符—否則它會匹配任何字符

@"\b\d{1,3}\.\d{1,3}\.\d{1,3}(?=\.\d{1,3})\b" 

這隻要它後面匹配像127.65.231任何字符串由像.111的字符串。