【问题标题】:IPv4 regex in bash [duplicate]bash中的IPv4正则表达式[重复]
【发布时间】:2014-02-05 22:18:41
【问题描述】:

有人对我的 IPv4 正则表达式有任何建议吗?这并不能完全验证 IPv4 地址。

IPV4="^(|[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})\|"

1.1.1.1 没问题,但 999.1.1.1 也验证:(

感谢您的意见

* 更新 *

根据 DopeGhoti 的输入,这是我目前所处的位置。我遇到了将其添加到我更大的正则表达式中的问题。我将这个正则表达式设置为一个变量,然后将它与另一个 IPv6 表达式结合起来。我在正则表达式中添加了一些东西。例如(| 在此处插入 DopeGhoti 正则表达式)。这也允许我接受一个空的 IPv4 地址。我还添加了一个 \|最后,因为一个大正则表达式检查的两个地址是 |分隔。

IPV4="^(|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))\|"
REGEX="$IPV4$IPV6"

这个过程适用于我更简单的 IPv4 正则表达式。新正则表达式中的某些内容正在破坏它。

* 更新 *

好吧,很奇怪。我用rubular测试了以下内容:

http://rubular.com/r/c6J3sESDyN

^(|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))\|$

这似乎有效。也许我还有另一个内部问题。现在检查。

【问题讨论】:

  • 250.1.1.1 是有效的 IP 地址。
  • 对不起,输入错误的例子。

标签: regex bash


【解决方案1】:

您是否尝试过逃避点字符?

 # ^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})

 ^ 
 (
      [0-9]{1,3} \. [0-9]{1,3} \. [0-9]{1,3} \. [0-9]{1,3} 
 )

【讨论】:

  • 这也将匹配 999.999.999.999
  • 是的,但它是 OP 的正则表达式,请接受他,只是显示点需要转义,因此它与 999999999999 不匹配
【解决方案2】:

你可以试试(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))

【讨论】:

  • 这非常非常接近。
  • 我对此进行了编辑并针对几个好的和坏的“地址”进行了测试,这似乎几乎可以按预期工作。例如,它仍然会匹配 0.1.2.3
  • 不幸的是 255.255.255.257 仍然有效。
  • 不是当我test?
  • 在这里试试rubular.com
【解决方案3】:

更新后:

如果合并的正则表达式在单独工作时失败,您可以尝试提取两个表达式中的每一个,然后测试:

egrep "(${IP4PATTERN}|${IP6PATTERN})" /path/to/file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2020-02-13
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多