2014-01-16 60 views
0

有沒有人對我的IPv4正則表達式有任何建議。這並未完全驗證IPv4地址。bash中的IPv4正則表達式

IPV4="^(|[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})\|" 

1.1.1.1是好的,但也999.1.1.1驗證:(

感謝輸入

* UPDATE *

基於DopeGhoti的輸入,這裏是哪裏im到目前爲止我遇到的問題添加到我的更大的正則表達式中我將這個正則表達式設置爲一個變量,然後將它與另一個表達式結合起來用於IPv6,還有一些我添加到正則表達式。例如a(|在此插入DopeGhoti正則表達式)。這允許我也接受一個空的IPv4地址。我還加了一個\ |最後,因爲這兩個地址被一個大正則表達式檢查是|分隔。

IPV4="^(|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))\|" 
REGEX="$IPV4$IPV6" 

這個過程適用於我簡單的IPv4正則表達式。新正則表達式中的某些東西正在破壞它。

* UPDATE *

好奇怪的。我測試了rubular如下:

http://rubular.com/r/c6J3sESDyN

^(|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))\|$ 

這似乎是工作。也許我有另一個內部問題。現在檢查。

+1

250.1.1.1是一個有效的IP地址。 – DopeGhoti

+0

對不起,輸入錯誤的例子。 – Atomiklan

回答

1

您是否嘗試過點點字符?

# ^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) 

^ 
(
     [0-9]{1,3} \. [0-9]{1,3} \. [0-9]{1,3} \. [0-9]{1,3} 
) 
+0

這也是999.999.999.999 – DopeGhoti

+0

這是真的,但它的OP的正則表達式,把它與他,只是顯示點需要逃避,因此它不匹配999999999999 – sln

0

您可以試試(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))

+0

這是非常非常接近。 – Atomiklan

+0

我編輯了這個文件,並對幾個好的和不好的「地址」進行了測試,這似乎非常符合預期的工作。例如,它仍然會匹配「0.1.2.3」。 – DopeGhoti

+0

不幸的是255.255.255.257仍然有效。 – Atomiklan

0

更新後:

如果合併後的正則表達式是失敗,無論是獨立工作的,你可以嘗試蒸餾每兩個表達式,然後用測試:

egrep "(${IP4PATTERN}|${IP6PATTERN})" /path/to/file