全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-09 7 分钟 ✍️ juanwangdev

正则表达式与字符串

正则表达式用于字符串模式匹配和处理。

正则表达式概念

什么是正则表达式

正则表达式是描述字符串模式的规则,用于匹配、查找、替换字符串。

Java
// 正则表达式示例
String regex = "\\d+";  // 匹配数字
String regex2 = "[a-z]+";  // 匹配小写字母

String类正则方法

matches判断匹配

Java
String str = "12345";

// 判断是否全是数字
boolean isDigit = str.matches("\\d+");  // true

// 判断邮箱格式
String email = "test@example.com";
boolean isEmail = email.matches("[\\w.]+@[\\w.]+\\.[\\w]+");  // true

// 判断手机号
String phone = "13812345678";
boolean isPhone = phone.matches("1[3-9]\\d{9}");  // true

replaceAll全部替换

Java
String str = "Hello123World456";

// 替换所有数字
String r1 = str.replaceAll("\\d", "");  // "HelloWorld"

// 替换所有数字为X
String r2 = str.replaceAll("\\d+", "X");  // "HelloXWorldX"

// 替换所有空白
String str2 = "a  b  c";
String r3 = str2.replaceAll("\\s+", " ");  // "a b c"

replaceFirst首次替换

Java
String str = "aaa bbb ccc";

// 只替换第一个匹配
String r = str.replaceFirst("\\w+", "XXX");
// "XXX bbb ccc"

split正则分割

Java
String str = "a1b2c3d";

// 按数字分割
String[] arr = str.split("\\d");  // ["a", "b", "c", "d"]

// 按多个分隔符分割
String str2 = "a,b;c|d";
String[] arr2 = str2.split("[,;|]");  // ["a", "b", "c", "d"]

// 限制分割次数
String str3 = "a,b,c,d";
String[] arr3 = str3.split(",", 2);  // ["a", "b,c,d"]

Pattern和Matcher类

Pattern编译正则

Java
import java.util.regex.Pattern;
import java.util.regex.Matcher;

// 编译正则表达式
Pattern pattern = Pattern.compile("\\d+");

Matcher匹配操作

Java
String str = "Hello123World456";

Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(str);

// find查找匹配
while (matcher.find()) {
    String match = matcher.group();  // 获取匹配内容
    System.out.println(match);  // 输出:123, 456
}

Matcher常用方法

Java
Matcher matcher = pattern.matcher(str);

// matches:整个字符串是否匹配
boolean allMatch = matcher.matches();

// find:查找下一个匹配
boolean found = matcher.find();

// group:获取匹配内容
String content = matcher.group();

// start:匹配开始位置
int start = matcher.start();

// end:匹配结束位置
int end = matcher.end();

// replaceAll:替换所有匹配
String replaced = matcher.replaceAll("X");

匹配示例

Java
String str = "2026-05-09";

// 匹配日期
Pattern pattern = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher matcher = pattern.matcher(str);

if (matcher.matches()) {
    String year = matcher.group(1);   // "2026"(第一组)
    String month = matcher.group(2);  // "05"(第二组)
    String day = matcher.group(3);    // "09"(第三组)
    
    System.out.println(year + "-" + month + "-" + day);
}

常用正则元字符

基本元字符

元字符说明示例
.任意字符"a.c"匹配abc
\d数字[0-9]"\d+"匹配123
\D非数字"\D+"匹配abc
\w字母数字下划线"\w+"匹配abc123
\W非字母数字"\W+"匹配空格等
\s空白字符"\s+"匹配空格
\S非空白字符"\S+"匹配内容

数量限定符

限定符说明示例
*0次或多次"a*"匹配空或aaa
+1次或多次"a+"匹配a或aaa
?0次或1次"a?"匹配空或a
{n}恰好n次"a{3}"匹配aaa
{n,}至少n次"a{2,}"匹配aa或aaa
{n,m}n到m次"a{2,4}"匹配aa到aaaa

字符集

语法说明示例
[abc]a或b或c"[abc]"匹配a
[a-z]a到z范围"[a-z]+"匹配abc
[0-9]0到9数字"[0-9]+"匹配123
[^abc]非abc"[^abc]"匹配d
[^a-z]非小写字母"[^a-z]"匹配A

位置限定符

限定符说明
^开头
$结尾
\b单词边界
Java
// 开头匹配
String str = "Hello";
boolean start = str.matches("^H.*");  // true

// 结尾匹配
boolean end = str.matches(".+o$");  // true

// 单词边界
String str2 = "hello world";
Pattern p = Pattern.compile("\\bworld\\b");
Matcher m = p.matcher(str2);
m.find();  // 匹配world(单词边界)

分组与选择

语法说明示例
()分组"(ab)+"匹配abab
|或选择"a|b"匹配a或b
Java
// 分组匹配
String str = "2026-05-09";
Pattern p = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})");
Matcher m = p.matcher(str);
if (m.matches()) {
    String year = m.group(1);   // 第1组
    String month = m.group(2);  // 第2组
}

// 或选择
String str2 = "cat";
boolean match = str2.matches("cat|dog");  // true

Java正则转义

双反斜杠转义

Java字符串中\需要转义为\。

Java
// 正则中的\d在Java中写成\\d
String regex = "\\d+";  // 匹配数字

// 正则中的\.在Java中写成\\.
String regex2 = "\\.";  // 匹配点号

// 匹配实际反斜杠
String regex3 = "\\";  // 匹配一个反斜杠

常用正则示例

Java
// 数字
String digit = "\\d+";  // 匹配:123

// 邮箱(简化)
String email = "\\w+@\\w+\\.\\w+";  // 匹配:test@example.com

// 手机号
String phone = "1[3-9]\\d{9}";  // 匹配:13812345678

// IP地址(简化)
String ip = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";

// 日期
String date = "\\d{4}-\\d{2}-\\d{2}";  // 匹配:2026-05-09

// URL(简化)
String url = "https?://[\\w./]+";

正则应用示例

验证邮箱

Java
String email = "test@example.com";

String regex = "[\\w.-]+@[\\w.-]+\\.[a-zA-Z]{2,}";
boolean valid = email.matches(regex);  // true

// 或使用Pattern
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(email);
boolean valid2 = m.matches();

验证手机号

Java
String phone = "13812345678";

String regex = "1[3-9]\\d{9}";
boolean valid = phone.matches(regex);  // true

提取数字

Java
String str = "Price: $123.45, Quantity: 100";

Pattern p = Pattern.compile("\\d+(\\.\\d+)?");
Matcher m = p.matcher(str);

while (m.find()) {
    System.out.println(m.group());
}
// 输出:123.45, 100

去除HTML标签

Java
String html = "<p>Hello <b>World</b></p>";

String text = html.replaceAll("<[^>]+>", "");
// "Hello World"

验证密码强度

Java
String password = "Abc123!@";

// 至少8位,包含大小写字母、数字、特殊字符
String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$";
boolean strong = password.matches(regex);

要点总结

  • String.matches()判断整个字符串是否匹配
  • String.replaceAll()替换所有匹配
  • String.replaceFirst()替换第一个匹配
  • String.split()正则分割
  • Pattern.compile()编译正则表达式
  • Matcher.find()查找匹配
  • Matcher.group()获取匹配内容
  • \d数字,\w字母数字,\s空白
  • []字符集,[^]排除字符集
  • *0或多,+1或多,?0或1
  • {n}恰好n次,{n,m}n到m次
  • ^开头,$结尾,\b单词边界
  • ()分组,|或选择
  • Java中\需写成\(双反斜杠)

📝 发现内容有误?点击此处直接编辑

← 上一篇 字符串比较
下一篇 → throws关键字
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库