首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个IP逗号有子网或无子网分隔的正则表达式

多个IP逗号有子网或无子网分隔的正则表达式
EN

Stack Overflow用户
提问于 2017-04-18 13:09:30
回答 2查看 3K关注 0票数 0

我有IPv4 address的正则表达式

^((0-9|1-9|10-9{2}|20-4|250-5).){3}(0-9|1-9|10-9{2}|20-4|250-5)$

我还有IPv4 CIDR range的正则表达式:

^((0-9|1-9|10-9{2}|20-4|250-5).){3}(0-9|1-9|10-9{2}|20-4|250-5)(/(0-9|1-2|30-2))$

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

模式:

XXX.XXX,xxx.xxx/XX,XX.XX,XX.XX/X,xx.x测试数据--

123.123.13.11、1.0.0.0、1.0.0.1/3、1.0.0.0/20

我正在使用http://regexr.com/来构建regex,我构建的regex在下面而不起作用--

代码语言:javascript
运行
复制
/(((([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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-18 19:33:16

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

要匹配,或行尾追加的([,\s]+|$)排除\s (如果不需要空格),+的意思是匹配一个或多个。

这应该适用于您匹配整个字符串。删除有效部件的结尾处的*;用^$环绕以匹配完整字符串。

代码语言:javascript
运行
复制
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]+|$))*

或者,对于最小组匹配的((?!\\/),对于/来说是负面的前瞻性,并不是所有的正则引擎都支持负前瞻性)

代码语言:javascript
运行
复制
(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
EN

Stack Overflow用户

发布于 2017-04-18 14:36:44

这就是你要找的吗?

代码语言:javascript
运行
复制
/((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地址:

代码语言:javascript
运行
复制
   (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,}结束。至少一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43473150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档