You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让正则表达式实现IP:Port全匹配或无匹配(C#场景)

解决C#中IP:Port全匹配正则问题

问题根源

你的正则存在两个核心问题:

  1. 未锚定整个字符串:正则默认会在输入字符串中寻找任意匹配的子串,而非要求完全匹配。比如256.250.139.193:1234中,引擎会跳过第一个字符2,匹配后面的56.250.139.193:1234。
  2. 端口正则存在逻辑错误:原端口正则中的([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-59999
    • 6[0-4][0-9]{3}:匹配60000-64999
    • 65[0-4][0-9]{2}:匹配65000-65499
    • 655[0-2][0-9]:匹配65500-65529
    • 6553[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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:25:22