魔术日期与java中的正则表达式

时间:2014-05-12 23:54:21

标签: java regex

我试图通过Java中的正则表达式检查日期是否是魔术。如果日期具有相同的日,月和年(不包括世纪),则日期是一个神奇的日期。

            String magicDate ="12-12-2012";

    Pattern pattern = Pattern.compile("(\\d{2})-\\d{2}-\\d{4}");
    //Pattern pattern = Pattern.compile("(\\d{2})-\\1-\\d{2}\\1");
    Matcher matcher = pattern.matcher(magicDate);

    if(matcher.matches())
    {
        System.out.println("Given date is a magic date");
        System.out.println(matcher.group());
    }
    else
    {
        System.out.println("Match failed");
    }

3 个答案:

答案 0 :(得分:3)

您应该使用\1来引用您的第一个群组。那么你的正则表达式是:

(\d{2})-\1-\d{2}\1

在Java代码中:

Pattern pattern = Pattern.compile("(\\d{2})-\\1-\\d{2}\\1");

答案 1 :(得分:2)

Szymon has the correct answer to your original question.基本上,Pattern州的javadoc

  

返回参考

     

\n无论nth捕获组匹配

您必须使用它来代替$来引用匹配的捕获组。

要回答您的编辑,replaceFirst州的javadoc

  

请注意替换中的反斜杠(\)和美元符号($)   字符串可能会导致结果与正确的结果不同   被视为字面替换字符串;看到   java.util.regex.Matcher#replaceFirst。使用   java.util.regex.Matcher#quoteReplacement压制特殊   如果需要,这些字符的含义。

答案 2 :(得分:-1)

捕获第一组,1或2位数,使用\1来引用它:

(\d{1,2})-\1-\d{0,}\1

结果:

8-8-2008           match
09-09-2009         match
10-10-2002         no match
11-11-2011         match
12-12-2012         match

它也适用于过去的日期和未来:

6-6-6              match
6-6-666            match

1-1-99991          match
5-5-1000000005     match