正则表达式(Regular Expression)是一种强大的文本处理工具,Java通过java.util.regex包提供完整的正则表达式支持。主要包含两个核心类:
| 元字符 | 说明 |
|---|---|
| . | 匹配任意单个字符(除换行符) |
| \d | 匹配数字[0-9] |
| \D | 匹配非数字[^0-9] |
| \s | 匹配空白字符 |
| \w | 匹配单词字符[a-zA-Z0-9_] |
| 量词 | 说明 |
|---|---|
| * | 0次或多次 |
| + | 1次或多次 |
| ? | 0次或1次 |
| {n} | 恰好n次 |
| {n,} | 至少n次 |
| {n,m} | 至少n次,不超过m次 |
String regex = "\\d+"; // 匹配一个或多个数字
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("123abc");
boolean matches = matcher.find(); // 返回true
String regex = "(\\d{3})-(\\d{4})";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("123-4567");
if(matcher.matches()) {
System.out.println("组1: " + matcher.group(1)); // 输出: 123
System.out.println("组2: " + matcher.group(2)); // 输出: 4567
}
^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$^1[3-9]\\d{9}$^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$问题1:为什么我的正则表达式在Java中需要双重转义?
解答:因为在Java字符串中\\才表示一个反斜杠,正则表达式本身也需要转义。
问题2:如何匹配多行文本?
解答:使用Pattern.MULTILINE标志或在正则中使用(?m)。