Java正则表达式语法详解:从基础到实战应用
一、前言
正则表达式(Regular Expression)是Java开发中处理字符串的利器,广泛应用于数据校验、文本提取、模式匹配等场景。本文将从Java正则表达式语法的核心知识点出发,结合实战案例,帮助开发者快速掌握这一高效工具。
二、基础语法与模式结构
1. 模式定义
Java正则表达式通过
java.util.regex
包中的
Pattern
和
Matcher
类实现。其核心语法包括:
模式字符串:用
/.../
包裹(Java中需转义为
"\\..."
)。
转义字符:如
\d
匹配数字,
\w
匹配字母/数字/下划线,
\s
匹配空白字符1314。
示例:
Pattern pattern = Pattern.compile("^\\d{6}$"); // 匹配6位数字 Matcher matcher = pattern.matcher("123456");
2. 基础元字符
.
匹配任意单个字符(除换行)
a.c
匹配 "abc", "azc"
^
匹配字符串开头
^Java
匹配 "Java..."
$
匹配字符串结尾
\.java$
匹配 ".java"
[]
字符集(匹配其中任意一个)
[abc]
匹配 "a", "b", "c"
三、核心语法详解
1. 限定符(Quantifiers)
限定符控制字符的匹配次数:
*
:匹配前一个字符0次或多次(如
a*
匹配空、a、aa等)
+
:匹配前一个字符1次或多次(如
a+
匹配a、aa等)
?
:匹配前一个字符0次或1次(如
colou?r
匹配 "color" 或 "colour")
{n}
:精确匹配n次(如
\\d{4}
匹配4位数字)1411。
示例:
// 匹配邮箱地址 Pattern.compile("^\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
```
### 2. 边界匹配与逻辑组
- **边界符**:
- `\\b`:单词边界(如`\\bJava\\b`匹配独立单词"Java")
- `\\B`:非单词边界
- **逻辑组**:
- `(?:...)`:非捕获组(如`(?:abc|def)`匹配 "abc" 或 "def")
- `(?!...)`:负向先行断言(如`\\d+(?!\\.\\d+)`匹配整数)。
---
## 四、实战应用案例
### 1. 常见场景实现
#### 案例1:手机号验证
```java
// 匹配中国手机号(11位,以13/14/15/18开头)Pattern.compile("^(13[0-9] |14[5|7]|15[0-9]|18[0-9])\\d{8}$");
```
#### 案例2:提取HTML标签内容
``````java
// 提取<p>标签内的文本 Pattern.compile("<p>(.*?)</p>");
```
### 2. 性能优化技巧
- **避免贪婪匹配**:使用`.*?`代替`.*`,防止过度匹配。
- **预编译模式**:通过`Pattern.compile` 复用Pattern对象,提升效率。
- **调试工具**:使用在线工具(如Regex101)验证正则表达式。
---
## 五、常见问题与解决方案
1. **特殊字符转义**:
- 如需匹配`$`或`.`,需转义为`\\$`和`\\.`。
2. **多行匹配**:
- 添加`Pattern.MULTILINE`标志,使`^`和`$`匹配每行开头/结尾。
3. **Unicode支持**:
- 使用`\\p{L}`匹配任意Unicode字母,支持中文、日文等。
---
## 六、
Java正则表达式语法灵活且功能强大,掌握其核心规则可显著提升开发效率。本文通过**基础语法解析、实战案例演示**和**性能优化建议**,帮助开发者快速上手。建议结合具体业务场景,通过调试工具不断优化正则表达式,实现精准的文本处理。
**关键词**:Java正则表达式语法、Pattern、Matcher、限定符、边界匹配、实战案例