[英]RegEx for Capturing Number Patterns not Followed by Other Characters
問題是您的端口表達式(\\d{2,5})
沒有抓取所有數字。 在意外傳遞的表達式中,如果查看匹配組, 1.22.234.255
和818
( 不是 8181
)。 該表達式拒絕1.22.234.255:8181
因為它后跟一個:
,但后來考慮一個3位數的端口並接受1.22.234.255:818
因為下一個字符是1
而不是:
。
補償這種情況的一種方法是通過更改模式來拒絕冒號和數字:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[:\s]+(\d{2,5})(?![0-9:])
這個正則表達式適用於所有情況
(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})\\s*(?::\\s*)?(?<!\\d)(\\d{2,5})(?!\\d|\\s*:)
https://regex101.com/r/5faUcx/1
可讀版本
( # (1 start), IP
\d{1,3} \.
\d{1,3} \.
\d{1,3} \.
\d{1,3}
) # (1 end)
\s*
(?: : \s* )?
(?<! \d )
( \d{2,5} ) # (2), Port
(?! \d | \s* : )
嘗試使用兩種不同的正則表達式,它會更簡單
空格的表達式1:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\d{2,5})
表達式2沒有空格,如果你有多行,你必須確保它有一個EOL字符或/ m修飾符:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\:(\d{2,5})$
匹配任何兩個並合並結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.