【java正则表达式语法大全】在Java编程中,正则表达式(Regular Expression)是一种强大的文本处理工具,广泛用于字符串的匹配、查找、替换和分割等操作。Java通过`java.util.regex`包提供了对正则表达式的支持,主要包括`Pattern`和`Matcher`两个类。
为了帮助开发者更高效地使用正则表达式,以下是对Java正则表达式常用语法的总结,结合实际示例,便于理解和应用。
一、基本语法说明
| 正则表达式 | 含义 | 示例 |
| `a` | 匹配字符 'a' | 匹配 "apple" 中的 'a' |
| `.` | 匹配任意单个字符(除换行符外) | 匹配 "cat", "dog", "bat" 等 |
| `\d` | 匹配一个数字(0-9) | 匹配 "123abc" 中的 '1', '2', '3' |
| `\D` | 匹配非数字字符 | 匹配 "abc123" 中的 'a', 'b', 'c' |
| `\s` | 匹配空白字符(空格、制表符、换行等) | 匹配 "hello world" 中的空格 |
| `\S` | 匹配非空白字符 | 匹配 "hello world" 中的 'h','e','l','l','o','w','o','r','l','d' |
| `\w` | 匹配字母、数字或下划线(等价于 [a-zA-Z0-9_]) | 匹配 "user_name123" |
| `\W` | 匹配非字母、数字或下划线 | 匹配 "user name!" 中的 ' ' 和 '!' |
| `^` | 匹配字符串的开头 | 匹配以 "http://" 开头的URL |
| `$` | 匹配字符串的结尾 | 匹配以 ".com" 结尾的域名 |
| `` | 匹配前面的元素0次或多次 | 匹配 "aaa", "aa", "a", "" |
| `+` | 匹配前面的元素1次或多次 | 匹配 "aaa", "aa", "a",不匹配 "" |
| `?` | 匹配前面的元素0次或1次 | 匹配 "a" 或 "" |
| `{n}` | 匹配前面的元素恰好n次 | 匹配 "aaa" 中的三个 'a' |
| `{n,}` | 匹配前面的元素至少n次 | 匹配 "aaaa" 中的四个 'a' |
| `{n,m}` | 匹配前面的元素至少n次,最多m次 | 匹配 "ab" 中的 a 和 b,长度为2 |
二、字符类与范围
| 正则表达式 | 含义 | 示例 |
| `[abc]` | 匹配 a、b 或 c 中的任意一个字符 | 匹配 "apple", "banana", "cherry" |
| `[a-z]` | 匹配小写字母 | 匹配 "hello" 中的所有字母 |
| `[A-Z]` | 匹配大写字母 | 匹配 "HELLO" 中的所有字母 |
| `[0-9]` | 匹配数字 | 匹配 "12345" |
| `[^abc]` | 匹配除了 a、b、c 以外的字符 | 匹配 "xyz" 中的每个字符 |
| `[a-zA-Z]` | 匹配大小写字母 | 匹配 "HelloWorld" |
| `[0-9a-zA-Z]` | 匹配字母和数字 | 匹配 "User123" |
三、分组与捕获
| 正则表达式 | 含义 | 示例 | ||
| `(abc)` | 将括号内的内容作为一个整体进行匹配 | 匹配 "abc123" 中的 "abc" | ||
| `(a | b | c)` | 匹配 a、b 或 c 中的任意一个 | 匹配 "apple", "banana", "cherry" |
| `(?i)pattern` | 忽略大小写匹配 | 匹配 "Apple" 或 "APPLE" | ||
| `(?m)pattern` | 多行模式,使 `^` 和 `$` 匹配每一行的开始和结束 | 适用于多行文本处理 | ||
| `(?s)pattern` | 单行模式,使 `.` 匹配包括换行符在内的所有字符 | 适用于跨行匹配 |
四、预查与反向引用
| 正则表达式 | 含义 | 示例 |
| `(?=pattern)` | 正向先行断言,匹配后面有 pattern 的位置 | 匹配 "test123" 中的 "test" |
| `(?!pattern)` | 负向先行断言,匹配后面没有 pattern 的位置 | 匹配 "test" 不在 "test123" 中 |
| `(?<=pattern)` | 正向后发断言,匹配前面有 pattern 的位置 | 匹配 "123test" 中的 "test" |
| `(? | 负向后发断言,匹配前面没有 pattern 的位置 | 匹配 "test" 前面不是 "123" |
| `\1` | 反向引用,引用第一个分组的内容 | 匹配 "abcabc" 中的重复部分 |
五、常见用法示例
```java
import java.util.regex.;
public class RegexExample {
public static void main(String[] args) {
// 匹配邮箱
String emailRegex = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b";
Pattern pattern = Pattern.compile(emailRegex);
Matcher matcher = pattern.matcher("example@example.com");
if (matcher.find()) {
System.out.println("匹配成功!");
}
// 替换所有数字为
String str = "User123";
String result = str.replaceAll("\\d", "");
System.out.println(result); // 输出:User
}
}
```
六、总结
Java正则表达式是处理字符串的强大工具,掌握其基本语法能够显著提升代码的灵活性和效率。通过合理使用字符类、量词、分组、断言等结构,可以实现复杂的字符串匹配与处理任务。在实际开发中,建议结合具体需求选择合适的正则表达式,并注意测试与调试,确保逻辑正确无误。


