1

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

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

提前致谢

4

3 回答 3

12

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

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

所以:

  • \\d{2}匹配任何 2 位数字
  • \\d{4}匹配任何 4 位数字
于 2013-07-03T10:30:14.597 回答
2

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

于 2013-07-03T10:30:16.487 回答
1

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

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

于 2013-07-03T10:32:14.277 回答