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位数。不多,不少)匹配?
感谢您的帮助。
答案 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])$