Java使用正则表达式匹配并替换字符串中的IP地址

 更新时间:2026年06月10日 09:04:25   作者:Zella折耳根  
在 Java 开发中,正则表达式是处理字符串匹配、查找、替换的神器,尤其在数据清洗、格式校验、文本处理场景中不可或缺,今天我们通过一道经典的编程题 ——匹配并替换字符串中的 IP 地址,从零拆解正则表达式的核心用法,需要的朋友可以参考下

引言

在 Java 开发中,正则表达式是处理字符串匹配、查找、替换的神器,尤其在数据清洗、格式校验、文本处理场景中不可或缺。今天我们通过一道经典的编程题 ——匹配并替换字符串中的 IP 地址,从零拆解正则表达式的核心用法,掌握PatternMatcher类的实战技巧。

一、编程题目需求

给定字符串 登录网站: 222.128.89.253,完成两个核心任务:

  1. 用正则表达式匹配出字符串中的 IP 地址,输出其出现位置和内容;
  2. 将匹配到的 IP 地址替换为 202.192.78.56,输出替换后的结果。

同时需要补全代码模板中的【代码 1】和【代码 2】,实现完整功能。

二、完整可运行代码

首先给出修正并补全后的最终代码(原类名与文件名不一致,已统一为ReplaceIP.java):

import java.util.regex.*;
public class ReplaceIP {
    public static void main(String args[]) {
        String str = "登录网站: 222.128.89.253";
        Pattern pattern;
        Matcher matcher;
        // 正则表达式:匹配标准IPv4地址
        String regex = "[\\d]{1,3}[.][\\d]{1,3}[\\d]{1,3}[.][\\d]{1,3}";
        // 代码1:初始化Pattern模式对象(编译正则表达式)
        pattern = Pattern.compile(regex);
        // 代码2:初始化Matcher匹配对象(绑定字符串与模式)
        matcher = pattern.matcher(str);
        String IP = "";
        // 循环查找所有匹配的子串
        while (matcher.find()) {
            IP = matcher.group(); // 获取匹配到的IP地址
            System.out.print(matcher.start() + "位置出现:"); // 获取匹配起始索引
            System.out.println(IP);
        }
        System.out.printf("将%s 替换为 202.192.78.56\n", IP);
        // 替换所有匹配到的内容
        String result = matcher.replaceAll("202.192.78.56");
        System.out.println(result);
    }
}

运行结果

5位置出现:222.128.89.253
将222.128.89.253 替换为 202.192.78.56
登录网站: 202.192.78.56

三、核心知识点拆解

1. Java 正则表达式的核心类

Java 处理正则表达式的 API 位于java.util.regex包下,核心是两个类:Pattern(模式类)Matcher(匹配器类)

(1)Pattern 类:正则表达式的编译表示

  • 作用:将字符串形式的正则表达式编译为模式对象,是正则的 “模板”;
  • 关键方法:Pattern.compile(String regex) —— 静态方法,编译正则表达式,返回Pattern对象(对应题目【代码 1】)。
  • 特点:Pattern是不可变类,线程安全,一个模式对象可重复使用。

(2)Matcher 类:字符串匹配引擎

  • 作用:绑定待匹配的字符串Pattern 模式,执行匹配、查找、替换操作;
  • 关键方法:pattern.matcher(CharSequence input) —— 创建Matcher对象(对应题目【代码 2】)。
  • 核心方法:
    • find():扫描字符串,查找下一个匹配的子串,找到返回true
    • group():获取最近一次匹配到的子串
    • start():获取匹配子串的起始索引
    • replaceAll(String replacement):替换所有匹配到的子串。

2. 正则表达式语法解析(匹配 IP 地址)

题目中的正则:[\\d]{1,3}[.][\\d]{1,3}[.][\\d]{1,3}[.][\\d]{1,3} 逐部分拆解:

  • [\\d]:匹配0-9 的数字\\d是数字的转义写法);
  • {1,3}:限定前面的字符出现 1~3 次(IP 地址每段数字范围 0-255,最多 3 位);
  • [.]:匹配点号.(正则中.是通配符,必须用[]\\转义);
  • 整体:匹配数字.数字.数字.数字格式的字符串,完美适配 IPv4 地址。

3. 代码关键逻辑

  1. 编译正则Pattern.compile(regex) 生成模式对象,避免重复编译提升效率;
  2. 创建匹配器pattern.matcher(str) 将字符串与正则绑定;
  3. 循环查找matcher.find() 遍历所有匹配项,group()获取匹配内容,start()获取位置;
  4. 全局替换replaceAll() 一次性替换所有匹配到的 IP 地址。

四、常见坑点总结

  1. 类名与文件名不一致:原模板文件名是ReplaceErrorWord.java,但类名是ReplaceIP,Java 要求类名必须与文件名完全一致,否则编译报错;
  2. 正则转义问题.在正则中是通配符,直接写会匹配任意字符,必须用[.]\\.转义;
  3. Matcher使用顺序:必须先调用find()匹配成功,才能调用group()/start(),否则会抛异常;
  4. replaceAll作用域:替换的是所有匹配项,如果只想替换第一个,用replaceFirst()

五、扩展优化

题目中的正则能匹配基础 IP,但无法校验 IP 合法性(比如999.999.999.999也会匹配),优化后的标准 IPv4 正则:

String regex = "((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)";

这个正则会严格限制每段数字为0-255,适合生产环境使用。

六、总结

通过这道题,我们掌握了 Java 正则表达式的标准使用流程

  1. 编写正则表达式 → 2. 编译为Pattern对象 → 3. 创建Matcher匹配器 → 4. 执行查找 / 替换操作。

Pattern+Matcher是 Java 正则的核心组合,熟练掌握后,无论是手机号、邮箱、IP 格式校验,还是字符串批量替换,都能轻松搞定!

以上就是Java使用正则表达式匹配并替换字符串中的IP地址的详细内容,更多关于Java正则表达式匹配并替换IP地址的资料请关注脚本之家其它相关文章!

相关文章

  • Java列出2到100之间所有素数的方法

    Java列出2到100之间所有素数的方法

    这篇文章主要介绍了Java列出2到100之间所有素数的方法,涉及java数值运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java HashMap底层实现原理

    Java HashMap底层实现原理

    HashMap在不同的JDK版本下的实现是不同的,在JDK1.7时,HashMap 底层是通过数组+链表实现的;而在JDK1.8时,HashMap底层是通过数组+链表或红黑树实现的,本详细介绍了HashMap底层是如何实现的,需要的朋友可以参考下
    2023-05-05
  • Java面试题及答案集锦(基础题122道,代码题19道)

    Java面试题及答案集锦(基础题122道,代码题19道)

    本文是小编收集整理的关于java基础面试题及答案集锦,基础题目有122道,代码题目有19道,非常不错,值得收藏,需要的朋友参考下
    2017-01-01
  • SpringCloud集成Micrometer Tracing的代码工程

    SpringCloud集成Micrometer Tracing的代码工程

    Micrometer Tracing 是一个用于微服务架构的追踪库,它提供了一种简单而强大的方式来收集和报告分布式系统中的性能和调用链信息,Micrometer Tracing 旨在帮助开发者和运维人员理解微服务之间的交互,本文给大家介绍了如何在 Spring Cloud 集成 Micrometer Tracing
    2024-12-12
  • Java 日期转换详解及实例代码

    Java 日期转换详解及实例代码

    这篇文章主要介绍了Java 日期转换详解及实例代码的相关资料,需要的朋友可以参考下
    2016-11-11
  • java实现计算器功能

    java实现计算器功能

    这篇文章主要为大家详细介绍了java实现计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • SpringBoot项目打包运行jar包的实现示例

    SpringBoot项目打包运行jar包的实现示例

    本文主要介绍了SpringBoot项目打包运行jar包的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • java web实现简单留言板功能

    java web实现简单留言板功能

    这篇文章主要为大家详细介绍了java web实现简单留言板功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • java Export大量数据导出和打包

    java Export大量数据导出和打包

    这篇文章主要为大家介绍了java Export大量数据的导出和打包实现过程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Mybatis 实现打印sql语句的代码

    Mybatis 实现打印sql语句的代码

    这篇文章主要介绍了Mybatis 实现打印sql语句的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论