0

我有IPv4 地址的正则表达式:

^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])。 ){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5] )$

我有IPv4 CIDR 范围的正则表达式:

^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])。 ){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5] )(/([0-9]|[1-2][0-9]|3[0-2]))$

问题是我应该如何使用逗号分隔重复它

图案:

XXX.XXX.XXX.XXX、XXX.XXX.XXX.XXX/XX、XX.XX.XX.XX、XX.XX.XX.XX/X、XX.XX.XX.X测试数据--

123.123.13.11、1.0.0.0、1.0.0.1/3、1.0.0.0/20

我正在使用http://regexr.com/通过正则表达式构建,我构建的正则表达式在下面并且不起作用 -

/(((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))),?)/g
4

2 回答 2

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]?)(\/(3[0-1]|2[0-9]|1[0-9]|[4-9]))\,?\b){1,}/g

编辑:分解

匹配一个 IP 地址:

   (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]?)

(\/(30|2[0-9]|1[0-9]|[4-9]))? /后跟一个 4 到 31 之间的数字。

\,?逗号。选修的。

?空间。选修的。

\b词尾。

){1,}捕获组结束。至少一次。

于 2017-04-18T14:36:44.470 回答
1

()*如果匹配开始和结束,则用ex循环环绕正则表达式,(<regex>)*然后将终止符移出循环,如^(regex)*$

如果您不想要空格,则匹配或,行尾附加([,\s]+|$)排除,意味着匹配一个或多个。\s+

这应该适合您匹配整个字符串。最后删除*有效部分;用 ^ $ 包围以匹配完整的字符串。

IPV4 = (([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
Optional subnet = (\/([4-9]|[12][0-9]|3[0-2]))?
coma or end of line = (,|$)
Putting it together = (((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([4-9]|[12][0-9]|3[0-2]))?)([,\s]+|$))*

或者,对于最小组匹配((?!\\/)是负前瞻/,并非所有正则表达式引擎都支持负前瞻)

(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]?)(\/(3[0-1]|2[0-9]|1[0-9]|[4-9]))?(?!\/)\b
于 2017-04-18T19:33:16.553 回答