Java 正则表达式匹配数字
在 Java 中,可以使用正则表达式来匹配各种形式的数字,以下是一些常见的数字匹配模式:
基本数字匹配
匹配任意数字(0-9)
String regex = "\\d"; // 或 "[0-9]"
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("123abc");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 1, 2, 3
}
匹配一个或多个数字
String regex = "\\d+"; // 一个或多个数字
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("abc123def456");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 123, 456
}
特定数字格式匹配
匹配整数
String regex = "-?\\d+"; // 可选负号 + 数字
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("-123 456 -789");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 -123, 456, -789
}
匹配浮点数
String regex = "-?\\d+(\\.\\d+)?"; // 可选负号 + 数字 + 可选小数部分
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("3.14 -2.5 7 0.123");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 3.14, -2.5, 7, 0.123
}
匹配科学计数法数字
String regex = "-?\\d+(\\.\\d+)?[eE][+-]?\\d+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("1.23e-4 5E6 7.8e+9");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 1.23e-4, 5E6, 7.8e+9
}
高级数字匹配
匹配特定范围的数字
// 匹配100-999的数字
String regex = "[1-9]\\d{2}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("123 99 1000 456");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 123, 456
}
匹配手机号码(示例:中国大陆手机号)
String regex = "1[3-9]\\d{9}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("13812345678 12345678901 8613812345678");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 13812345678
}
匹配身份证号(示例:18位身份证)
String regex = "[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]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher("11010519900307887X 123456789012345678");
while (matcher.find()) {
System.out.println(matcher.group()); // 输出 11010519900307887X
}
实用方法
检查字符串是否完全由数字组成
public static boolean isNumeric(String str) {
return str != null && str.matches("-?\\d+(\\.\\d+)?");
}
System.out.println(isNumeric("123")); // true
System.out.println(isNumeric("-123.45")); // true
System.out.println(isNumeric("abc")); // false
提取字符串中的所有数字
public static List<String> extractNumbers(String input) {
List<String> numbers = new ArrayList<>();
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
numbers.add(matcher.group());
}
return numbers;
}
List<String> nums = extractNumbers("abc123def456ghi");
System.out.println(nums); // 输出 [123, 456]
注意事项
- 在 Java 中,正则表达式中的
\需要转义为\\,因为\在 Java 字符串中是转义字符。 - 对于复杂的数字验证,可能需要更精确的正则表达式。
- 考虑使用
Pattern.CASE_INSENSITIVE标志如果需要忽略大小写(如科学计数法中的 e/E)。
希望这些示例能帮助你使用 Java 正则表达式匹配各种数字格式!
