当前位置: 首页 > news >正文

Java 的 正则表达式

Java 的 正则表达式(Regular Expression,简称 regex) 主要使用 java.util.regex 包中的 PatternMatcher 类来进行文本匹配和处理。


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

作用
Pattern表示编译后的正则表达式。
Matcher用于执行匹配操作(如查找、替换)。
PatternSyntaxException用于表示正则表达式语法错误的异常。

2. 正则表达式基本语法

(1)常见的元字符

元字符作用
.匹配任意字符(除换行符)
\d匹配数字 [0-9]
\D匹配非数字 [^0-9]
\w匹配单词字符 [a-zA-Z_0-9]
\W匹配非单词字符 [^a-zA-Z_0-9]
\s匹配空白字符(空格、制表符、换行符等)
\S匹配非空白字符
^匹配字符串的开始
$匹配字符串的结束
\b匹配单词边界

(2)常见的限定符

限定符作用
*匹配前面的字符 0 次或多次 (ab* 可匹配 aababb...)
+匹配前面的字符 1 次或多次 (ab+ 只能匹配 ababb...)
?匹配前面的字符 0 次或 1 次 (ab? 可匹配 aab)
{n}匹配前面的字符 恰好 n 次
{n,}匹配前面的字符 至少 n 次
{n,m}匹配前面的字符 至少 n 次,至多 m 次

(3)字符类(Character Classes)

字符类作用
[abc]匹配 abc
[^abc]匹配除 a、b、c 以外的任意字符
[a-z]匹配 az 之间的任意小写字母
[A-Z]匹配 AZ 之间的任意大写字母
[0-9]匹配 09 之间的任意数字

3. Java 代码示例

(1)匹配手机号

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String regex = "1[3-9]\\d{9}";  // 匹配中国大陆手机号
        String text = "我的手机号是 13812345678。";
        
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);
        
        if (matcher.find()) {
            System.out.println("匹配到的手机号: " + matcher.group());
        } else {
            System.out.println("未匹配到手机号");
        }
    }
}

输出:

匹配到的手机号: 13812345678

(2)验证邮箱格式

public class EmailValidation {
    public static void main(String[] args) {
        String regex = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\\.[a-zA-Z]+$";
        String email1 = "user@example.com";
        String email2 = "invalid-email.com";

        System.out.println(email1.matches(regex)); // true
        System.out.println(email2.matches(regex)); // false
    }
}

(3)提取字符串中的数字

import java.util.regex.*;

public class ExtractNumbers {
    public static void main(String[] args) {
        String text = "订单号: 12345, 价格: 89.99元";
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(text);
        
        while (matcher.find()) {
            System.out.println("找到的数字: " + matcher.group());
        }
    }
}

输出:

找到的数字: 12345
找到的数字: 89
找到的数字: 99

(4)替换字符串中的内容

public class ReplaceText {
    public static void main(String[] args) {
        String text = "Hello, Java! Java is powerful.";
        String replacedText = text.replaceAll("Java", "Python");
        System.out.println(replacedText);
    }
}

输出:

Hello, Python! Python is powerful.

4. 常见应用场景

场景

正则表达式
手机号匹配"1[3-9]\\d{9}"
邮箱匹配"^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+\\.[a-zA-Z]+$"
IP 地址匹配"\\b(?:\\d{1,3}\\.){3}\\d{1,3}\\b"
提取 HTML 标签内容"<[^>]+>"
验证 URL`"^(http
过滤非数字字符"\\D"

5. Pattern 进阶用法

使用 Pattern.compile 进行多次匹配,提高性能

Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("价格是 299 元,折扣价 199 元");

while (matcher.find()) {
    System.out.println(matcher.group());
}

 使用 Pattern 标志位(Flags)

Pattern pattern = Pattern.compile("hello", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Hello World");
System.out.println(matcher.find());  // true

相关文章:

  • 网络爬虫【爬虫库request】
  • QT编程之数据库开发
  • Mysql的安装配置
  • 数据结构——顺序栈seq_stack
  • MySQL事务日志详解:Redo Log 和 Undo Log 的核心机制
  • 【大模型理论篇】CogVLM:多模态预训练语言模型
  • 详细说明脚本评估和耗时较长的任务
  • npm报错‘proxy‘ config is set properxy. See: ‘npm help config‘
  • 【负载均衡系列】HAProxy
  • 蓝桥杯 第十天 :2022 国赛 第 2 题 排列距离/康托定理
  • 20242817李臻《Linux⾼级编程实践》第四周
  • 使用 Python 实现时间序列预测:电力负载需求预测
  • SpringCloud负载均衡:Ribbon核心组件与策略配置
  • 【C++】:异常
  • 如何优化 React 应用性能?
  • Hugo 生成静态网站并部署到 GitHub Pages 的完整流程
  • 深入解析MediaPipe:强大的实时计算机视觉框架
  • 自由学习记录(45)
  • OBOO鸥柏丨广告机终端控制端KylinOS麒麟、统信UOS/鸿蒙国产系统
  • CTF类题目复现总结-[WUSTCTF2020]find_me 1
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 广东省人大教科文卫委原主任委员梁万里被开除党籍:退休后受贿仍不知止
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点
  • 白玉兰奖征片综述丨综艺市场破局焕新,多元赛道重塑价值坐标
  • 深一度|在亚马尔的天才面前,姆巴佩戴上“帽子”又如何
  • 人民时评:莫让“假俗乱”讲解侵蚀“文博热”