为什么不同的字符串与模式匹配?

时间:2019-05-29 12:11:34

标签: java regex

我正在使用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})");

请帮助我纠正模式!

3 个答案:

答案 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}";

Regex demo | Java demo

请注意,对于匹配项,您可以省略外部括号。

答案 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}

当然应该从正则表达式中删除空格,并且字符“ /”必须在其前加反斜杠才能被识别。