我试图将美国所有可能的格式与单一的正则表达式相匹配。可能吗?怎么样?
这些是可能的格式:
2017/09/15
2017.09.15
2017-09-15
09/15/2017
09.15.2017
09-15-2017
9/15/2017
9.15.2017
9-15-2017
2017/9/15
2017-9-15
2017.09.15
但我也需要这些:
09/15
09.15
09-15
我已尝试过此/(0?[1-9]|[12][0-9]|3[01])[\/\-\.](0?[1-9]|1[012])[\/\-\.]\d{4}/
,但它无法正常使用
答案 0 :(得分:1)
对于单个正则表达式而言,这将被证明是一项艰巨的任务,无论语言和风格如何,因为混合排序不仅要求您为每个Y,M,D组件设置不同的长度标记,而且<每个组件的em> semantics 都有可接受值的特定限制。例如,在2位数的第一种形式(即月份优先)中,您的值不能大于12.但在4位数形式中,年份优先,您的最大值仅受您想要支持的最大年份的约束。然后,你必须考虑第二个位置,如果第一年,限制为12,因为月份是第二,否则,如果第一个月是限制是31。
你发布的努力远非最终答案。我强烈建议在turing-complete中引入数据清理步骤,在继续沿着这条道路前,根据有效值识别和订购每个令牌。否则,请解释为什么这不是一个选项。
答案 1 :(得分:0)
试试这个,应该有效:\d+(\/|\.|-)+.*\d