2014-06-19 92 views
0

我在使用RegEx時遇到問題。主要是我想創建一個過濾器,只發現谷歌分析這25個IP地址:在Google Analytics中匹配25個IP地址的正則表達式

  • 216.54.215.0
  • 216.54.215.1
  • 216.54.215.2
  • ...
  • 216.54。 215.24

我第一次想到自己可以使用:

216\.54\.215\.([0-9]|[1][0-9]|[2][0-4]) 

RegEx Test

但你可以看到,它不是捕捉10-24第二位。

然後,我打開了「顯示空白」,並注意到RegEx可能存在換行問題。所以,我試圖利用[0-9]$最後.後只選擇一個單一的數字:

216\.54\.215\.([0-9]$|[1][0-9]|[2][0-4])沒有承認任何的0-9,因爲我認爲它會匹配一個單一的數字是奇怪[0- 9]並在那之後結束,即$。我認爲這是錯誤的嗎?

接下來,我打開了顯示空格,我看到每個IP地址都有換行符。我不知道爲什麼我決定嘗試字邊界,但我決定換掉我的$\b。你知道什麼,它的工作。

216\.54\.215\.([0-9]\b|[1][0-9]|[2][0-4]) 

爲字邊界的定義是:相配,而不消耗任何字符,之間立即\w一個字符匹配和字符不是由\w(以任一次序)匹配。

問題:

  1. 這是寫的正則表達式的最好方法?
  2. 爲什麼$在我的第二個例子中不起作用?
  3. 爲什麼\b有效?

回答

2
216\.54\.215\.([0-9]|[1][0-9]|[2][0-4])+ 

的在末尾添加+裝置

匹配前面的元素的一個或多個次。例如

模式: 「是+」 匹配: 「一直」, 「蜜蜂」,在 「是」,在 「彎曲」

更妙的是,你可以去

216\.54\.215\.([0-9]|[1][0-9]|[2][0-4]){1,3} 

然後你只會在最後選擇3位數字,並且如果錯誤地輸入第4位數字,它將消除錯誤的可能性。 (可能會或可能不會在你的情況很有用)

一般{ n , m }前一個元素,至少n次, 的比賽,但不超過m次。

模式 「\ d {3,5}」 在 「193024」

匹配 「166」, 「17668」 & 「19302」,這將是你的結果。 Results

所以對於你的情況的確切解決方案是使用

216\.54\.215\.([0-9]\b|[1][0-9]|[2][0-4]){1,2}\b 

這意味着你要在最後兩個數字與被限制爲24和boundry結束還有那麼正則表達式將不會選擇216.54.215.24216.54.215.2411

this是最終結果。

當我使用正則表達式時,我總是保留this頁作爲參考。

0

這裏有您需要的正則表達式: ^216\.54\.215\.([0-9]|1[0-9]|2[0-4])$

0

一個正則表達式應該工作:

^216\.54\.215\.(1?[0-9]|2[0-4])$ 

地址0-9被1?[0-9],其中1?沒有匹配項覆蓋。

地址10-19涵蓋1?[0-9],其中1?匹配十位數。

地址20-24覆蓋2[0-4]