首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么从{3}更改为{4}对此正则表达式无效?

为什么从{3}更改为{4}对此正则表达式无效?
EN

Stack Overflow用户
提问于 2017-08-17 17:13:15
回答 1查看 40关注 0票数 3

我有一个基本的IP正则表达式,用于检查ip是否在0.0.0.0到255.255.255.255之间。当我进入的时候

代码语言:javascript
复制
grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" file.txt

它总共匹配12个ip地址(这对于我的文本文件是正确的),但当我需要它来突出显示第四个八位字节时,它只突出显示前3个八位字节。但将其更改为"{4}“时未显示任何匹配项。

代码语言:javascript
复制
grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}" file.txt

我的快速问题是,为什么不使用{4}突出显示全部4个八位字节作为匹配

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-17 17:21:10

它不匹配第四个二进制八位数,因为表达式匹配一个二进制八位数,然后恰好. 3次。由于第4个二进制八位数之后没有.,因此它不匹配,也不突出显示。

您可以使用

代码语言:javascript
复制
grep -E "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.?){4}"

在这里,\.?匹配1或0个.字符(即.是可选的,因此第四个八位字节现在将匹配并突出显示)。

或者,一个更精确的模式也可以做到:

代码语言:javascript
复制
grep -E "(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}"

它将匹配并突出显示整个IP地址字符串。

您可以根据自己的要求在模式中添加锚点或单词边界。例如,以下是单词边界模式的变体:

代码语言:javascript
复制
grep -E "\b(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}\b"

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

https://stackoverflow.com/questions/45731025

复制
相关文章

相似问题

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