如何修改正则表达式,避免将2021 PST这类年份误识别为PST格式合法时间
正则表达式调整方案
问题核心
原有正则未限制时间数字左侧的字符类型,会截取4位年份的后2位数字完成匹配,导致2021 PST这类年份内容被误识别为时间;同时原有正则中PST前强制要求空格,无法匹配bar12PST这类无空格的合法时间格式。
调整后正则
(?<!\d)\d{1,2}(?:[.:](\d\d))*\s*([aApP][.: ]?[mM][.: ]?|o['’]clock|afternoon)*\s*PST
调整说明
- 新增
(?<!\d)负向零宽回顾断言:要求匹配到的1-2位时间数字左侧不能是其他数字,从根源避免截取4位年份的后两位完成误匹配 - 删除原有正则中PST前的硬空格,保留
\s*匹配0或多个空白字符的规则,同时支持带空格的12 PST和不带空格的bar12PST格式 - 其余原有逻辑完全保留,不影响原本支持的带时分时间、am/pm标识、o'clock标识等场景的匹配效果
验证效果
可正常匹配的合法时间示例:
- 19:00 PST
- 12 PST
- bar12PST
- 9:30am PST
- 5 o'clock PST
不会匹配的误判场景示例:
- 2021 PST
- 2023PST
内容的提问来源于stack exchange,提问作者Hanie Asemi
相关产品推荐
相关产品推荐

