You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL正则:如何用后向断言匹配无前缀的年月格式?

正则匹配无前缀日的年月格式(PostgreSQL环境)

需求说明

匹配「September 2020」或「September 20」这类无前缀日的月份+年份组合,同时排除以下带日前缀的格式:

  • 带点的日前缀:21. September 2020
  • 不带点的日前缀:21 September 20

原有正则的问题

之前尝试的正则:

(?<![0-9][.]) September [1-4]?[0-9]?[0-9][0-9]

仅能排除带点的日前缀场景,无法覆盖不带点的情况;且PostgreSQL不支持可变长度后向断言,不能直接将后向断言中的点设为可选。

解决方案

利用PostgreSQL支持的固定长度否定后向断言,通过两个断言组合覆盖两种前缀场景:

(?<![0-9])(?<![0-9][.]) September (?:[0-9]{4}|[0-9]{2})

正则解释

  • (?<![0-9]):确保月份前不是单个数字,排除不带点的日前缀(如21 September 20中的1 September部分)
  • (?<![0-9][.]):确保月份前不是「数字+点」的格式,排除带点的日前缀(如21. September 2020)
  • (?:[0-9]{4}|[0-9]{2}):匹配4位年份(如2020)或2位年份(如20),使用非捕获组优化性能

可选优化:单词边界

如果需要避免月份被误匹配为更长单词的一部分(比如Septemberxyz),可以添加单词边界\b:

(?<![0-9])(?<![0-9][.])\bSeptember\b (?:[0-9]{4}|[0-9]{2})

内容的提问来源于stack exchange,提问作者Silvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:06:09