我试图通过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");
}
答案 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