這將是最便攜,最容易編寫,最容易維護將是部分。
\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
這將只匹配有效的IP地址以及拆分各部分進行進一步的檢查
if (int(group[1]) != 224 and (int(group[1]) != 0 or int(group[2]) != 0 or int(group[3]) != 0 or int(group[4]) != 0) ...
正則表達式是不是「而不是」經營好。
但是,如果你堅持把它作爲一個單一的正則表達式,那麼只需枚舉所有有效的選項。
\b(25[0-5]|2[0134][0-9]|22[0-35-9]|1[0-9][0-9]?|[2-9][0-9]|[2-9])
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
...這是不完美的,因爲它只是測試的第一個字節是不是224或0。如果你想對0.0.0.0一個完整的測試,那麼你就必須重現15倍以上識別至少一個字節不爲零的所有組合。
當然,你會想要寫一個測試,以確保你爲所有40億組合返回正確的答案。不應該花太長時間才能運行... ;-)
通過在'.'上分割會比較容易,然後測試每個元素。 – Toto
你是什麼意思分裂。 ?對不起,我對正則表達式相當陌生 – Oli
我的意思是分開IP地址的4個元素。 – Toto