我正在嘗試創建一個匹配非格式化爲:ip | port的正則表達式。
端口值可以在[1 65535]之間。組數據的正則表達式 - 與IOC IP的行尾不匹配| PORT
實例:
(1)8.8.8.8 | 0(不良:端口0不允許)
(2)8.8.8.8 | 1(好)
(3)8.8。 8.8 | 65536(壞:端口> 65535)
(4)8.8.8.8 | dawda(壞:炭)
正則表達式表達(符合壞數據)應該匹配(1),(3)和(4) 。
認爲IP部分將永遠是正確的(無需正則表達式吧)和我需要的是檢查的端口。正因爲如此,通過我這樣的行的端部開始的評價:
正則表達式匹配0和65535之間的端口:
\ | 6553 [0-5](| 655 0-2 [ ] \ d | 65 [0-4] \ d {2} | 6 [0-4] \ d {3} | [1-5] \ d {4} | [1-9] \ d {0,3 })
Regex with end of line matching:
\ |(6553 [0-5] | 655 [0-2] \ d | 65 [0-4] \ d {2} | 6 [0-4] \ d {3} | [1-5] \ d {4} | [1-9] \ d {0,3})$
現在,我想否定它,以避免linent端口有效的端口。我看看其他論壇(How to negate specific word in regex?,Regular Expressions and negating a whole character group),並瞭解負面預測正則表達式。
根據這些論壇和排除模式正則表達式,我的正則表達式應爲:
^* $
我修改了我的正則表達式,並添加*的IP部分((MY_REGEX)?!)。插入^。
Negative regex at end of line:?!
^(\ |(6553 [0-5] | 655 [0-2] \ d | 65 [0-4] \ d {2} | 6 [0-4 ] \ d {3} | [1-5] \ d {4} | [1-9] \ d {0,3}))。 $
我遇到的問題是結尾部分。* $,它允許端口號之後的東西。最後,此代碼將以PHP執行。根據PHP,不支持可變長度後視,這使我首先選擇lookahead正則表達式。
感謝您的幫助。
我會推薦使用簡單的正則表達式進行基本的語法驗證,並在'|'後面的數字上使用捕獲組。然後在你的代碼中使用一種方法來驗證數字的範圍。正則表達式不會很好。 – CAustin