2013-07-11 28 views
-4

我看到這個正則表達式將匹配IP地址: \ b(?:\ d {1,3}。){3} \ d {1,3} \ b正則表達式匹配IP地址的前三個八位字節

我該如何改變它,使它只會匹配IP地址的前三個八位字節?

所以提供了1.2.3.4它只會匹配1.2.3

謝謝! 新手到正則表達式。

+2

如果你知道你的分隔符是什麼樣子,那麼你並不需要一個正則表達式,你需要「分裂」。 – 2013-07-11 20:25:01

回答

0

這樣做:

address: \b(?:\d{1,3}.){2}\d{1,3}\b 

奧萊特那麼,是什麼上面呢?以及\d匹配一個數字,{1,3}表示不應該有1-3位數字,不能少於。點.實際上匹配任何字符(包括點,更正確的將是\.)因爲我們在括號內有這個聲明,在這裏我必須承認我不知道你正在使用哪種語言,雖然我懷疑它是PHP,所以我真的不知道?:做什麼。但在{2}之後說模式會重複兩次,然後最後的\d{1,3}與第三個八位字節匹配。

+1

謝謝。還有一個問題,如果你不介意。有沒有辦法匹配IP地址的最後八位字節? – John

+0

你有更多關於如何匹配的信息嗎? IP在字符串的末尾嗎?你想提取一個完整的IP地址的最後八位字節?等等。 –

1

首先,你提供的正則表達式是不正確的。它將匹配IP地址,但也有類似192a168.1f12。原因是因爲.是正則表達式中的特殊字符,它等同於任何字符。用\逃脫,所以你得到\b(?:\d{1,3}\.){3}\d{1,3}\b,你有一個IP地址的正則表達式。

然後,分析正則表達式 - 它由兩個主要部分組成 - a.b.c.部分的部分,其中a,b和c是一到三位數的數字(從技術上講它不是IP地址,因爲它應該爲255 ,但它足夠接近),然後是最後一個到三位數字部分。 注意,第一部分以{3}結尾,指定它應出現3次。你希望它只出現2次,然後是相同的第二部分,所以你得到\b(?:\d{1,3}\.){2}\d{1,3}\b

對於您來說這應該足夠了,但根據您的要求,您還可以確保前三個八位字節後面跟着最後一個八位字節(但不匹配它)。

而且,你並不真的需要不匹配的組,這樣可以簡化您的正則表達式來此:

\b(\d{1,3}\.){2}\d{1,3}\b