【问题标题】:How to write a regular expression to match the 3rd octet of an IP address如何编写正则表达式以匹配 IP 地址的第三个八位字节
【发布时间】:2018-12-01 07:04:53
【问题描述】:

我需要按以下格式更新 CIDR 范围 (IP) 的第三个八位字节。

10.150.0.0/27

我只想匹配第三个八位字节,以便可以替换它。在这种情况下,这将是左边的第一个 0。

【问题讨论】:

  • 为什么不解析 CIDR 并修改 IP 以便您知道它是有效的,而不是修改字符串?
  • 请添加您要用于替换的语言。您同时使用了 javago - 您使用的是哪一个?
  • 在点上分割,修改arr[2],然后用点连接。
  • go.which 是 rg2 我需要这个

标签: regex string replace ip-address


【解决方案1】:

\d{1,3}\.\d{1,3}\.(\d{1,3})\.\d{1,3}\/\d+ 将捕获该序列中的第三部分。您可以使用regex.replace 将其替换为其他内容。

如果您只是想要特定的 IP,那就更容易了。 10\.150\.(\d+)\.0\/27

【讨论】:

    【解决方案2】:

    您可以使用积极的前瞻来实现:

    [0-9]+(?=\.[0-9]+\/)
    

    查看this example

    【讨论】:

    • 这一个在为示例提供的链接中按预期工作,但在与 go 一起使用时失败,因为它不喜欢问号,
    【解决方案3】:

    以下正则表达式模式最多匹配从 0 到 9 的 3 位数字,共 4 个八位字节,并在末尾包含掩码。第三个八位字节周围的括号(捕获组)是您所追求的。

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

    或更多简写

    \d{1,3}\.\d{1,3}\.(\d{1,3})\.\d{1,3}/\d{1,2}
    

    在 Java 中,您需要执行以下操作:

    Pattern pattern = new Pattern.compile("[0-9]{1,3}\.[0-9]{1,3}\.([0-9]{1,3})\.[0-9]{1,3}/[0-9]{1,2}";
    Matcher matcher = pattern.match("yourIPAddressHere") 
    while (matcher.find()) {
        String thirdOctet = matcher.group(0); <--- the number of the matching group
    }
    

    从那里您可以使用 String.replace 或任何您喜欢的方式来修改原始 ip。希望这会有所帮助!

    【讨论】:

    • 您必须转义点,否则它将匹配任何字符。
    • 已修复。原始正则表达式假定仅传递了带有子网 cidr 掩码的正确格式的 ipv4,但如果您在字符串中搜索并希望专门匹配句点,是的,您需要转义它们。
    猜你喜欢
    • 2023-01-05
    • 1970-01-01
    • 2020-08-04
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2021-08-15
    相关资源
    最近更新 更多