如何让正则表达式实现IP:Port全匹配或无匹配(C#场景)
解决C#中IP:Port全匹配正则问题
问题根源
你的正则存在两个核心问题:
- 未锚定整个字符串:正则默认会在输入字符串中寻找任意匹配的子串,而非要求完全匹配。比如
256.250.139.193:1234中,引擎会跳过第一个字符2,匹配后面的56.250.139.193:1234。 - 端口正则存在逻辑错误:原端口正则中的
([0-5]{0,5})会允许空字符串或连续的0-5字符(比如00000),导致1.1.1.1:这种冒号后无合法端口的情况也能匹配到1.1.1.1:。
修正后的正则表达式
^((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]?)):((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([1-9][0-9]{0,3})|0)$
关键修正点
- 锚定字符串边界:用
^匹配字符串开头,$匹配结尾,确保只有整个字符串完全符合规则才会匹配成功。 - 修复端口正则:移除错误的
([0-5]{0,5}),替换为覆盖0-65535全范围的匹配逻辑:0:匹配端口0[1-9][0-9]{0,3}:匹配1-9999[1-5][0-9]{4}:匹配10000-599996[0-4][0-9]{3}:匹配60000-6499965[0-4][0-9]{2}:匹配65000-65499655[0-2][0-9]:匹配65500-655296553[0-5]:匹配65530-65535
测试验证
| 输入字符串 | 匹配结果 | 说明 |
|---|---|---|
256.250.139.193:1234 | 无匹配 | IP非法,整体不匹配 |
1.1.1.1:65535 | 匹配成功 | IP和端口均合法 |
1.1.1.1:65536 | 无匹配 | 端口超出范围,整体不匹配 |
1.1.1.1: | 无匹配 | 端口为空,整体不匹配 |
C#代码示例
using System; using System.Text.RegularExpressions; class Program { static void Main() { string pattern = @"^((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]?)):((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([1-9][0-9]{0,3})|0)$"; string[] testCases = { "256.250.139.193:1234", "1.1.1.1:65535", "1.1.1.1:65536", "1.1.1.1:" }; foreach (string test in testCases) { bool isMatch = Regex.IsMatch(test, pattern); Console.WriteLine($"输入: {test} → 匹配结果: {isMatch}"); } } }
内容的提问来源于stack exchange,提问作者VA systems engineer
相关产品推荐
相关产品推荐

