拆分IPv4和IPv6 IP:端口语法



我正在尝试找出创建正则条件规则的最佳方法,该规则适用于IPv4和IPv6地址空间,当时格式为:

[2a00:1397:4:2a02::a1]:50434
129.13.252.47:13456

我很接近,但基本上,我需要匹配在最后一个结肠字符(端口之前),而不是匹配该行的其余部分,因为我不想丢弃端口值。这个想法是最后一个结肠字符。

我目前有以下正则 :[^:]+$,它基本上使我成为最后一个结肠字符,但也与端口值匹配。我需要比赛才能停止结肠角色。这可能吗?

https://regexr.com/3hpvk

REGEX ((?::))(?:[0-9]+)$将根据结尾号进行反向查找,然后再进行Collon。结肠(:)将比组(1)。

请参阅https://regexr.com/3hpvt

这将对所有各个部分进行分组:(.*)((?::))((?:[0-9]+))$

仅在数字的文本尾部的正则式图案,仅在colons为>/:( d )$/gm/gm

之后才必须跟随该图案。

当您需要检测使用哪种IP6或IP4格式时,应使用更复杂的正则表达式模式,例如/(:( d )$)|(] |(]:( d )$)/gm

标志[g]&[m]是可选的,多余的,它们仅通过regexr.com进行调试。

在实际软件中,我使用正则

RegEx.Create(
  '(:(?<IPv4>d+$))|(]:(?<IPv6>d+)$)',
  [roCompiled, roExplicitCapture]
);

如果您使用的是Java,则无需通过Regex做到这一点。您可以简单地使用与IPv4和IPv6

一起使用的内置URI类
        import java.net.URI;    
        String testUri = "ldap://[2001:678:8a0:ff00:250:56ff:fe84:222a]:10389/o=Airius.com??sub?(sn=Jensen)";
        URI uri = new URI(testUri);
        System.out.println(uri.getScheme()); //ldap
        System.out.println(uri.getHost()); // [2001:678:8a0:ff00:250:56ff:fe84:222a]
        System.out.println(uri.getPort()); //10389

最新更新