杰瑞科技汇

Java正则如何精准匹配数字?

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]

注意事项

  1. 在 Java 中,正则表达式中的 \ 需要转义为 \\,因为 \ 在 Java 字符串中是转义字符。
  2. 对于复杂的数字验证,可能需要更精确的正则表达式。
  3. 考虑使用 Pattern.CASE_INSENSITIVE 标志如果需要忽略大小写(如科学计数法中的 e/E)。

希望这些示例能帮助你使用 Java 正则表达式匹配各种数字格式!

分享:
扫描分享到社交APP
上一篇
下一篇