我使用 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日期间生成值。
请帮帮我。
提前致谢。
答案 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,"|");