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

Java 为什么不同的字符串与模式匹配?,java,regex,Java,Regex,我正在使用Java1.7 我期望: Pattern ddmmyyyyPattern = Pattern.compile("(\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4})"); 应将字符串与至少两个分隔符-/匹配。 但是,以下是匹配的 07 2.3180, 45 3.3183, 19 4.3183, 77 5.3025, 25 6.3023. 此外,9507 2.31与 Pattern yyyymmddPattern = Pattern.compile("(\\d{

我正在使用Java1.7

我期望:

Pattern ddmmyyyyPattern = Pattern.compile("(\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4})"); 
应将字符串与至少两个分隔符-/匹配。 但是,以下是匹配的

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})");

请帮我纠正这个模式

之所以发生这种情况,是因为character类也与空格匹配

您可以使用带有反向引用的捕获组来匹配类似于模式的日期。请注意,is不会验证日期本身

\d{1,2}([-/.])\d{1,2}\1\d{4}
关于图案

  • \d{1,2}
    匹配1或2个数字
  • ([-/.])
    在组中捕获匹配-/or
  • \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}";
|


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

这是因为字符类也匹配空格

您可以使用带有反向引用的捕获组来匹配类似于模式的日期。请注意,is不会验证日期本身

\d{1,2}([-/.])\d{1,2}\1\d{4}
关于图案

  • \d{1,2}
    匹配1或2个数字
  • ([-/.])
    在组中捕获匹配-/or
  • \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}";
|


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

需要从字符类中删除空格

\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4}
           ^             ^ 
换成这个

\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}

您需要从字符类中删除空格

\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4}
           ^             ^ 
换成这个

\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}
尝试以下模式:

\d{1,2}([-\/.])\d{1,2}([-\/.])\d{4}
当然,空白区域应该从正则表达式中删除,字符“/”需要在它之前有一个反斜杠,以便它被识别。

< P>试试这个模式:

\d{1,2}([-\/.])\d{1,2}([-\/.])\d{4}

当然,空白区域应该从正则表达式中删除,字符“/”需要在其前面有一个反斜杠才能识别。

匹配模式与执行相等检查不同:可以有多个值与模式匹配匹配模式与执行相等检查不同:可以有多个值与模式匹配