如何为今年和上一年创建正则表达式?

时间:2017-03-02 17:36:15

标签: java regex java-8

我使用 Java MongoDB 为过去六个月的值创建正则表达式, 我可以使用下面的代码段

创建当前年和当月的正则表达式
StringBuilder regexPattern = new StringBuilder("id");
regexPattern.append(":");       
regexPattern.append(today.getYear());

if(today.getMonthValue()>9)
    regexPattern.append(today.getMonthValue());
 else
             regexPattern.append("0").append(today.getMonthValue());

        regexPattern.append(".*"); 

以上代码段的输出结果为: id:201703。* 同样,我需要为2016年11月10日至2017年3月2日期间生成值。

请帮帮我。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我能够用它来生成模式。它将所有模式收集到一个List中。

您可以遍历此列表并根据需要生成正则表达式模式。

public class DateRegEx {

    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate _6MonthsAgo = today.minus(6, ChronoUnit.MONTHS);

        LocalDate start = _6MonthsAgo.minusDays(1);
        LocalDate end = today.minusDays(1);

        List<String> regexPattern = Stream.iterate(start, date -> date.plusMonths(1))
            .limit(ChronoUnit.MONTHS.between(start, end.plusMonths(1)))
            .map(DateRegEx::makePattern)
            .collect(Collectors.toList());
        System.out.println(regexPattern);
    }

    private static String makePattern(LocalDate someDate) {
        StringBuilder regexPattern = new StringBuilder("id");
        regexPattern.append(":");

        regexPattern.append(someDate.getYear());

        if (someDate.getMonthValue() > 9)
            regexPattern.append(someDate.getMonthValue());
        else
            regexPattern.append("0").append(someDate.getMonthValue());

        regexPattern.append(".*");
        return regexPattern.toString();
    }

}

希望这有帮助!

答案 1 :(得分:0)

我已经用这种方式解决了。它从头到尾给出了个别月份的正则表达式。

    while (!startDate.isAfter(endDate)) {

        StringBuilder pattern = new StringBuilder().append("reqId");
        pattern.append(":");

        LocalDate endOfMonth = startDate.withDayOfMonth(startDate.lengthOfMonth());

        LocalDate stDate = null;
        LocalDate eDate = null;

        if(actualStartDate.getMonthValue() == startDate.getMonthValue()){
            stDate=actualStartDate;
        }else{
            stDate =  startDate;
        }

        if(endOfMonth.getMonthValue() != endDate.getMonthValue()){
            eDate  =  endOfMonth ;
        }else{
            eDate  = endDate  ;
        }
        pattern.append(startDate.getYear());
        int monthValue = stDate.getMonthValue();

        if(monthValue>9)
             pattern.append(monthValue);
         else
             pattern.append("0").append(monthValue);


        if(actualStartDate.getMonthValue()!=startDate.getMonthValue() && startDate.getMonthValue() != endDate.getMonthValue()){
        }else{

            if(startDate.getDayOfMonth() == stDate.getDayOfMonth() && endOfMonth.getDayOfMonth() == eDate.getDayOfMonth()){

        }else{  
            pattern.append("(");
            int x = stDate.getDayOfMonth();
            for(int i = stDate.getDayOfMonth(); i < eDate.getDayOfMonth(); i++){

                 if(x>9)
                     pattern.append(x);
                 else
                     pattern.append("0").append(x);

                pattern.append("|");
                x++;
            }
            if(eDate.getDayOfMonth()>9)
             pattern.append(eDate.getDayOfMonth());
                else
             pattern.append("0").append(eDate.getDayOfMonth());

            pattern.append(")");

        }
        }
        pattern.append(".*");   

        System.out.println(pattern.toString());
        regexList.add(pattern.toString());
        startDate = startDate.plusMonths(1);


    String regexPattern = org.springframework.util.StringUtils.collectionToDelimitedString(regexList,"|");