用于拆分IPv4和IPv6 ip:端口语法的正则表达式

时间:2017-12-10 10:51:43

标签: regex ip

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

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

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

我目前有以下正则表达式:[^:]+$,它基本上是我的最后一个冒号字符,但也匹配端口值。我需要匹配停止在冒号角色。这可能吗?

https://regexr.com/3hpvk

2 个答案:

答案 0 :(得分:2)

正则表达式((?::))(?:[0-9]+)$将根据结束数字然后是collon进行反向查找。冒号(:)将是group(1)。

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

this会对所有单独的部分进行分组:(.*)((?::))((?:[0-9]+))$

答案 1 :(得分:0)

仅用于数字尾部的正则表达式模式,必须在冒号后为 /:(\ d +)$ / gm

当您需要检测使用哪种ip6或ip4格式时,应使用更复杂的Regex模式,例如 /(:(\ d +)$)|(]:(\ d +)$)/ gm

[g]和[m]标志是可选的和冗余的,仅用于通过regexr.com进行调试。

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

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