Ruby时间格式正则匹配问题:Rubular有效IRB不匹配如何修复?
问题修复方案
你的正则错误地使用了字符类(方括号[])——在字符类内部,+、{2}、()这类元字符会失去特殊匹配含义,变成普通字符。当前正则实际只是匹配单个符合的字符(比如字符串第一个数字4),所以返回0仅表示匹配到字符串的起始位置,而非完整的时间格式。
修复后的正则
直接移除方括号,调整为正确的量词与分组结构:
/\d+:\d{2}(a|p)m/i
如果需要确保整个字符串严格为该时间格式(避免匹配包含时间的长字符串),加上起始/结束锚点:
/^\d+:\d{2}(a|p)m$/i
正则说明
\d+:匹配1位或多位数字(兼容1位小时数如4、2位小时数如11):\d{2}:匹配冒号加固定两位分钟数(a|p)m:匹配am或pm,括号用于分组选择i修饰符:可选,忽略大小写,支持匹配AM/PM格式
IRB验证示例
# 匹配完整时间字符串 "4:00am" =~ /^\d+:\d{2}(a|p)m$/i # 返回0,完全匹配 "11:03pm" =~ /^\d+:\d{2}(a|p)m$/i # 返回0,完全匹配 "abc4:00am" =~ /^\d+:\d{2}(a|p)m$/i # 返回nil,不符合全匹配要求
内容的提问来源于stack exchange,提问作者junkone
相关产品推荐
相关产品推荐

