Java 正则表达式 - 检查字符串是否以精确的数字结尾

Java RegEx - check if a string ends with an exact number of digits

Java 匹配方法 returns '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 有更多数字,我希望第 2 和第 3 次检查为 return 'false',但他们没有。我如何强制执行精确匹配(仅 8 位数字。不多也不少)?

感谢您的帮助。

这应该有效:

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

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

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

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