正则表达式末尾匹配问题:如何匹配字符串末尾的日期格式
正则匹配字符串末尾日期:优先匹配长年份的解决方案
首先纠正你正则里的笔误:把分支里的d{4}改成\d{4},否则四位年份的分支完全不生效。
然后解决「优先匹配短年份」的问题:正则的分支匹配是从左到右依次尝试,当你把\d{2}放在\d{4}前面时,即使字符串末尾是四位年份,正则会先尝试匹配前两位数字作为年份,剩下的两位数字无法满足末尾的$,导致匹配失败。
修正后的正则应该把长年份分支放在前面:
\d{1,2}[-/]\d{1,2}[-/](\d{4}|\d{2})$
原理说明
- 当字符串末尾是四位年份(如
3/18/2023)时,正则会优先匹配\d{4}分支,刚好覆盖到字符串结尾,满足$的要求,匹配成功。 - 当字符串末尾是两位年份(如
3/18/23)时,\d{4}分支匹配失败,会自动尝试下一个分支\d{2},同样满足$的要求,匹配成功。
补充优化(可选)
如果你的目标日期前面可能有空白字符(比如示例字符串里日期前的空格),可以在正则开头加上\s*来匹配任意数量的空白,确保能定位到末尾的日期:
\s*\d{1,2}[-/]\d{1,2}[-/](\d{4}|\d{2})$
内容的提问来源于stack exchange,提问作者JonWayn
相关产品推荐
相关产品推荐

