我正在使用Java 1.7。
我希望:
Pattern ddmmyyyyPattern = Pattern.compile("(\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4})");
应该将出现至少2个分隔符-/的字符串匹配。 但是,以下是匹配的
07 2.3180, 45 3.3183, 19 4.3183, 77 5.3025, 25 6.3023.
此外,9507 2.31与
匹配Pattern yyyymmddPattern = Pattern.compile("(\\d{4}[- /.]\\d{1,2}[- /.]\\d{1,2})");
请帮助我纠正模式!
答案 0 :(得分:4)
发生这种情况是因为角色类也与空格匹配。
您可以使用具有后向引用的捕获组来匹配date like
模式。请注意,它不会验证日期本身。
\d{1,2}([-/.])\d{1,2}\1\d{4}
关于图案
\d{1,2}
匹配1或2位数字([-/.])
在匹配-/或。\d{1,2}
匹配1或2位数字\1
向第1组中捕获的内容进行反向引用(因此2019年12月12日将不匹配)\d{4}
匹配4位数字在Java中:
String regex = "\\d{1,2}([-/.])\\d{1,2}\\1\\d{4}";
请注意,对于匹配项,您可以省略外部括号。
答案 1 :(得分:2)
您需要从角色类中删除空格
\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4}
^ ^
更改为此
\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}
答案 2 :(得分:0)
尝试以下模式:
\d{1,2}([-\/.])\d{1,2}([-\/.])\d{4}
当然应该从正则表达式中删除空格,并且字符“ /”必须在其前加反斜杠才能被识别。