Java正则表达式详解
需积分: 0 184 浏览量
更新于2009-02-03
收藏 839KB PDF 举报
### Java正则表达式详解
#### 一、正则表达式基础知识
正则表达式是一种强大的文本处理工具,能够帮助用户查找、替换以及操作特定的字符串。正则表达式的使用非常广泛,几乎所有的编程语言都有相应的支持。对于Java开发者而言,掌握正则表达式能够极大地提高开发效率。
##### 1.1 句点符号(`.`)
句点符号是正则表达式中最基本的元素之一。它可以匹配除换行符之外的任意单个字符。例如,如果要匹配以“t”开头,以“n”结尾的所有三个字母的单词,可以使用表达式“t.n”。这将匹配诸如“tan”、“ten”等单词,但也会匹配“t#n”、“tpn”等不符合常规的组合,因为句点符号匹配所有字符。
**示例:**
```java
String regex = "t.n";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("tan");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
```
##### 1.2 方括号符号 (`[]`)
方括号符号用于指定一组字符中的任一字符。例如,要匹配以“t”开头且以“n”结尾,中间只能是元音字母的单词,可以使用“t[aeiou]n”。这样就只会匹配“tan”、“ten”、“tin”、“ton”。
**示例:**
```java
String regex = "t[aeiou]n";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("ten");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
```
##### 1.3 “或”符号 (`|`)
“或”符号(`|`)用于匹配多个选项中的任意一个。例如,要匹配“toon”或者前面提到的以“t”开头且以“n”结尾,中间是元音字母的单词,可以使用“t(a|e|i|o|oo)n”。这里需要注意的是,方括号只允许匹配单个字符,而圆括号(`()`)可以用来表示多个字符的选项。
**示例:**
```java
String regex = "t(a|e|i|o|oo)n";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("toon");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
```
##### 1.4 表示匹配次数的符号
表示匹配次数的符号用来控制前一个字符或表达式的重复次数。常见的有:
- `{n}`: 指定前一个字符或表达式恰好出现`n`次。
- `{n,}`: 指定前一个字符或表达式至少出现`n`次。
- `{n,m}`: 指定前一个字符或表达式至少出现`n`次,最多出现`m`次。
**示例:** 匹配美国社会安全号码的格式“999-99-9999”。
```java
String regex = "\\d{3}-\\d{2}-\\d{4}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("123-45-6789");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
```
如果允许连字符可选,则可以使用“?”符号来表示前一个字符或表达式可能出现0次或1次。
```java
String regex = "\\d{3}-?\\d{2}-?\\d{4}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("123456789");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
```
##### 1.5 “否”符号 (`^`)
“否”符号用于指定不想要匹配的字符。当用在方括号内时,它表示不想要匹配的字符集。例如,“[^X]”表示匹配除“X”之外的任何字符。
**示例:**
```java
String regex = "[^X]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("Y");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
```
##### 1.6 圆括号和空白符号
圆括号用于创建捕获组,可以在匹配后单独获取这部分内容。空白符号(`\s`)用于匹配任何空白字符,包括空格、制表符等。
**示例:** 提取生日日期中的月份部分。
```java
String regex = "(\\w+)\\d{2},\\d{4}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("June26,1951");
if (matcher.find()) {
System.out.println("Matched month: " + matcher.group(1));
}
```
##### 1.7 其他符号
还有一些常用的符号简化了某些常见的模式匹配:
- `\d`: 匹配任何数字。
- `\D`: 匹配任何非数字。
- `\s`: 匹配任何空白字符。
- `\S`: 匹配任何非空白字符。
- `\w`: 匹配任何字母数字字符。
- `\W`: 匹配任何非字母数字字符。
- `.`: 匹配除换行符之外的任何单个字符。
- `^`: 匹配输入字符串的开始位置。
- `$`: 匹配输入字符串的结束位置。
**示例:** 匹配美国汽车牌照号码,格式为四个数字加两个字母。
```java
String regex = "[0-9]{4}[A-Z]{2}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("8836KV");
if (matcher.find()) {
System.out.println("Matched: " + matcher.group());
}
```
通过以上知识点的学习,读者应该对Java中正则表达式的使用有了较为全面的了解。接下来,可以尝试使用这些知识解决实际问题,并进一步探索更多高级特性。
scjwjk
- 粉丝: 5
- 资源: 38
最新资源
- 基于GRCNN网络的机械臂视觉平面抓取(python开发源码+说明文档+设计报告).zip
- 个人课设基于Springboot+vue+mybatisplus+mysql的Tom在线影院购票系统开发项目.zip
- 基于SpringBoot-Vue-Android的社区管理系统源码+设计报告(前后端分离架构).zip
- 工业仪表(指针表与数字表盘)智能监控与预警系统源码(比赛获奖项目).zip
- 基于深度学习的图像分类模型训练(人工智能课程大作业,含源码与报告).zip
- 人工智能毕设基于深度学习的电力领域应用实战项目(含源码与项目说明).zip
- 基于深度学习的计算机视觉一体化平台(数据标注、训练、部署,含源码).zip
- 微信机器人搜图与ChatGPT文本自动总结项目源码(适用于chatgpt-on-wechat).zip
- 机器学习大作业基于机器学习的恶意URL检测算法(含项目说明,含源码).zip
- 基于深度学习python开发的课堂专注度行为识别系统(含项目说明与源码).zip
- 基于机器学习的二手车交易价格预测算法及项目说明(含源码+说明文档).zip
- 人工智能课设基于卷积神经网络的果蔬图像识别与分类系统(源码及说明).zip
- 安徽省机器人大赛-单片机与嵌入式赛道竞赛C赛道作品(含全部参赛资料).zip
- 毕业设计声源定位跟踪系统-最新开发(含全新源码+设计报告+全部资料).zip
- 新课设基于Springboot和MySQL的鲜花在线销售商城系统源码+报告及全部资料.zip
- 东南大学物联网竞赛参赛作品-基于EPS32的儿童用可定位通信信箱设计方案.zip