gpt4 book ai didi

regex - 为什么从 {3} 更改为 {4} 不适用于此正则表达式?

转载 作者:行者123 更新时间:2023-12-01 12:19:11 24 4
gpt4 key购买 nike

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

grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" file.txt

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

grep -E "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){4}" file.txt

我的快速问题是,为什么它不使用 {4} 将完整的 4 个八位字节突出显示为匹配项?

最佳答案

它不匹配第四个八位位组,因为表达式匹配一个八位位组,然后 . 刚好 3 次。由于第4个八位字节后没有.,所以不匹配,不高亮显示。

你可以使用

grep -E "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.?){4}"

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

或者,更精确的模式也可以:

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 地址字符串。

您可以根据需要向模式添加 anchor 或单词边界。例如。这是一个词边界模式变体:

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"

enter image description here

关于regex - 为什么从 {3} 更改为 {4} 不适用于此正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45731025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com