Java正则表达式实战示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java正则表达式:从理论到实践

\n

正则表达式(regex)是用于文本搜索、替换和验证的强大工具。在Java中,通过java.util.regex包实现,该包包含两个主要类:Pattern(模式)和Matcher(匹配器)。本文将讲解语法、关键方法,并通过实际代码示例巩固知识。

\n

本文既适合刚接触Java的新手,也适合希望复习知识的有经验的开发者。所有示例均可直接在您的IDE中运行。

\n\n

1. Pattern和Matcher基础

\n

在Java中使用正则表达式,首先通过Pattern.compile()编译模式。然后创建Matcher对象,将模式应用于字符串。

\n

看一个最简单的示例:在文本中查找所有数字。

\n
import java.util.regex.Matcher;\nimport java.util.regex.Pattern;\n\npublic class RegexDemo {\n    public static void main(String[] args) {\n        String text = "Java版本21于2023年发布";\n        String regex = "\\\\d+"; // 一个或多个数字\n\n        Pattern pattern = Pattern.compile(regex);\n        Matcher matcher = pattern.matcher(text);\n\n        while (matcher.find()) {\n            System.out.println("找到: " + matcher.group());\n        }\n    }\n}
\n

程序输出:

\n
找到: 21\n找到: 2023
\n

注意双反斜杠\\\\d——在Java字符串字面量中,需要对反斜杠进行转义。如果正则表达式中需要\\d,在代码中应写为\\\\d。

\n\n

2. 正则表达式语法:元字符和量词

\n

要有效使用正则表达式,需要记住以下主要元字符:

\n
    \n
  • . — 任意字符(除换行符外);
  • \n
  • \\\\d — 数字(等价于[0-9]);
  • \n
  • \\\\w — 字母、数字或下划线([a-zA-Z0-9_]);
  • \n
  • \\\\s — 空白字符;
  • \n
  • ^ — 字符串开头;
  • \n
  • $ — 字符串结尾。
  • \n
\n

量词控制重复次数:

\n
    \n
  • + — 一次或多次;
  • \n
  • * — 零次或多次;
  • \n
  • ? — 零次或一次;
  • \n
  • {n} — 恰好n次;
  • \n
  • {n,m} — 从n到m次。
  • \n
\n

示例:查找所有由拉丁字母组成、长度为3到5个字符的单词。

\n
String text = "Java regex example for beginners";\nString regex = "\\\\b[a-zA-Z]{3,5}\\\\b";\n\nPattern pattern = Pattern.compile(regex);\nMatcher matcher = pattern.matcher(text);\n\nwhile (matcher.find()) {\n    System.out.println(matcher.group());\n}\n// 输出: Java, regex, for
\n

单词边界\\\\b防止部分匹配(例如,"Java"不会成为"JavaScript"的一部分)。

\n\n

3. 实战示例:验证和数据提取

\n

接下来看一些实际开发中常见的任务。

\n\n

3.1. 验证电子邮件地址

\n

最简单的检查:是否存在"@"符号和域名。

\n
public static boolean isValidEmail(String email) {\n    String regex = "^[\\\\w.-]+@[\\\\w.-]+\\\\.\\\\w{2,}$";\n    return Pattern.matches(regex, email);\n}\n\npublic static void main(String[] args) {\n    System.out.println(isValidEmail("user@example.com")); // true\n    System.out.println(isValidEmail("invalid-email"));    // false\n}
\n

Pattern.matches()方法自动检查整个字符串(等同于matcher.matches())。

\n\n

3.2. 提取电话号码

\n

假设文本中出现格式为"+7 (999) 123-45-67"的电话号码。

\n
String text = "联系人: +                

博客

书籍推荐