匹配最近一个月/上个月的正则表达式



我是regex的新手,我只想从下面的字符串中匹配最近/上个月的字符串,因为我们可以看到只有202206应该匹配,将来如果有202207,那么它应该只匹配202207。为了匹配,经过研究我发现我可以使用以下regex。然而,问题不是只匹配最近的日期,而是匹配两个日期。我该如何使我的regex只匹配最近/上个月的字符串?正则表达式中有if条件吗?我也参考了这篇文章。然而,正则表达式是针对Perl而不是Java的。我想获得Java的原因是因为我面临着类似的问题,由SO用户帖子提到。我的ETL工具是不同的。

提前感谢!

test1-202201
test1-202206 

正则表达式

/d{4}(0[1-9]|1[0-2])/

br

使用YearMonth类而不是regex

YearMonth
.now( 
ZoneId.of( "Africa/Casablanca" )
)
.isAfter(
YearMonth
.parse( "2022-06" )
)
<标题>

详细信息正如前面提到的,regex是一个字符串比较工具。Regex对当前和前一个月一无所知。Regex非常强大和有趣。但不要落入"如果你唯一的工具是锤子,那么每个问题看起来都像钉子"的陷阱。

对于日期时间工作,使用日期时间类。幸运的是,Java现在在JSR 310中定义的java.Time包中提供了业界领先的日期时间类。

永远不要使用在java之外找到的遗留日期时间类。时间包。它们很糟糕,是如何做面向对象编程的大师之作。

年-月,使用YearMonth类。

确定当前的年-月需要一个时区。对于任何给定的时刻,全球不同地区的日期都是不同的。因此,在月末/月初,日本东京可能是"下个月",而同时在美国俄亥俄州托莱多是"上个月"。

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
YearMonth ym = YearMonth.now( z ) ;

对于文本,使用标准ISO 8601格式:YYYY-MM。

String output = ym.toString() ; 

和解析。

YearMonth ym = YearMonth.parse( "2022-06" ) ;

最新更新