Java正则表达式匹配Double类型数字
在Java中,可以使用正则表达式来匹配和验证Double类型的数字,以下是一些常用的正则表达式模式:

基本Double匹配
String doubleRegex = "[-+]?[0-9]*\\.?[0-9]+";
这个模式可以匹配:
- 可选的正负号
[-+]? - 可选的整数部分
[0-9]* - 可选的小数点
\\.? - 至少一位的小数部分
[0-9]+
更精确的Double匹配
String preciseDoubleRegex = "[-+]?[0-9]+(\\.[0-9]+)?([eE][-+]?[0-9]+)?";
这个模式可以匹配:
- 可选的正负号
- 整数部分(至少一位)
- 可选的小数部分(小数点后至少一位)
- 可选的科学计数法部分(e/E后跟可选正负号和数字)
完整Double匹配(包括边界情况)
String fullDoubleRegex = "[-+]?((\\d+\\.?\\d*)|(\\.\\d+))([eE][-+]?\\d+)?";
使用示例
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class DoubleRegexExample {
public static void main(String[] args) {
String[] testCases = {
"123", "123.45", "-123.45", "+123.45",
".45", "123.", "1.23e10", "1.23E-10",
"abc", "123..45", "123..", "..45"
};
String doubleRegex = "[-+]?((\\d+\\.?\\d*)|(\\.\\d+))([eE][-+]?\\d+)?";
Pattern pattern = Pattern.compile(doubleRegex);
for (String testCase : testCases) {
Matcher matcher = pattern.matcher(testCase);
System.out.printf("%-10s -> %b%n", testCase, matcher.matches());
}
}
}
注意事项
-
这些正则表达式可以匹配字符串形式的Double,但不会验证数值是否在Double的范围内(如1.7976931348623157E308是Double的最大值)
-
如果需要验证数值范围,建议先使用正则表达式格式验证,然后尝试转换为Double类型并检查范围
(图片来源网络,侵删) -
对于科学计数法,确保正则表达式包含了
[eE][-+]?\\d+部分 -
如果需要严格匹配不允许前导/后导空格,可以在正则表达式两端添加
^和锚点
String strictDoubleRegex = "^[-+]?((\\d+\\.?\\d*)|(\\.\\d+))([eE][-+]?\\d+)?$";
希望这些信息对你有帮助!
