Java:在Pattern.compile中使用Curly大括号

时间:2013-07-03 10:28:05

标签: java

我正在处理现有代码,我有这段代码,如果它属于昨天,则负责删除符号。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
public class Test {
    public static void main(String args[]) {
        try {
            String currentSymbol = "TEST JUL 20 2013";
            Pattern datePattern = Pattern
                    .compile("(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) \\d{2} \\d{4}");
            Matcher dateMatcher = datePattern.matcher(currentSymbol);
            if (dateMatcher.find()) {
                System.out.println("Inside dateMatcher.find");
            } else {
                System.out.println("Not Inside dateMatcher.find");
            }
        } catch (Exception t) {
            t.printStackTrace();
        }
    }

}

此代码工作正常,但有人可以告诉我此行\\d{2} \\d{4}需要什么,这是什么意思

        Pattern datePattern = Pattern
                .compile("(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC) \\d{2} \\d{4}");

提前致谢

3 个答案:

答案 0 :(得分:12)

查看http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

  • \\d是字符类“Decimal” - 所以从0到9的任何数字。
  • {2}指定“前一个表达式必须恰好出现2次”

这样:

  • \\d{2}匹配任何2位数字
  • \\d{4}匹配任何4位数字

答案 1 :(得分:3)

匹配某个月,然后是2位数字,然后是4位数字:Jan 14 2012

答案 2 :(得分:1)

\\d指的是十进制数字(外行人的术语中为0-9),花括号中的数字是预期的确切出现次数。

在您的情况下,{2}匹配月份的两位数,{4}匹配一年中的四位数。