我是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" ) ;
标题>