Java RegEx - 检查字符串是否以确切的位数结尾

时间:2018-01-22 22:29:41

标签: java regex quantifiers

Java matches方法为以下所有

返回'true'
// check if a string ends with an exact number of digits (yyyyMMdd 8 digits)

    String s20180122_1 = "fileNamePrefix_20171219";
    String s20180122_2 = "fileNamePrefix_20171219131415111";

    System.out.println(s20180122_1.matches(".*\\d{8}$"));
    System.out.println(s20180122_2.matches(".*\\d{8}$"));
    System.out.println(s20180122_2.matches(".*\\d{8,8}$"));

由于s20180122_2有更多数字,我希望第二和第三次检查返回'false',但它们没有。我如何强制执行确切的(仅8位数。不多,不少)匹配?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

这应该有效:

.*[^\d]\d{8}$

或者如果Java正则表达式引擎支持\D组,您可以使用它而不是[^\d]

答案 1 :(得分:1)

This regex会验证最后8个字符是yyyyMMdd形式的数字(年份在20-21世纪之内:

.*[^\d](19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$