我正在尝试找出创建正则条件规则的最佳方法,该规则适用于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