`
dormancy
  • 浏览: 9755 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

时间正则式的表示

阅读更多
转至:http://zhidao.baidu.com/question/125006373.html



最简单的正则 如 : \d{4}-\d{2}-\d{2}
但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题.....

对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。

UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。

先考虑与年份无关的前三条规则,年份可统一写作

(?!0000)[0-9]{4}

下面仅考虑月和日的正则

1. 包括平年在内的所有年份的月份都包含1-28日

(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])

2. 包括平年在内的所有年份除2月外都包含29和30日

(0[13-9]|1[0-2])-(29|30)

3. 包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日

(0[13578]|1[02])-31)

合起来就是除闰年的2月29日外的其它所有日期

(?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)

接下来考虑闰年的实现

1 : 四年一闰
([0-9]{2}(0[48]|[2468][048]|[13579][26])

2 : 百年不闰,四百年再闰
(0[48]|[2468][048]|[13579][26])00

3 : 合起来就是所有闰年的2月29日
([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)

四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则

^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$

考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。

^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$ 
分享到:
评论

相关推荐

    java正则式学习

    Java正则表达式是Java语言中用于处理字符串的强大工具,源于早期对神经网络...然而,这也需要投入时间去学习和熟悉其独特的语法和用法。通过不断地实践和探索,开发者可以熟练运用正则表达式解决各种字符串处理问题。

    Delphi正则式控件

    3. **获取匹配结果**:`TMatch`对象包含`Groups`属性,可以访问匹配的子组,`Value`属性返回整个匹配的文本,而`Index`属性表示匹配的起始位置。 4. **替换操作**:`Replace`方法用于替换匹配到的文本。通过设置`...

    正则表达式傻瓜式宝典

    "正则表达式傻瓜式宝典"是一本专门介绍这一主题的中文教程,旨在帮助初学者快速理解和掌握正则表达式的使用。 该书可能涵盖了以下主要知识点: 1. **基础概念**:首先,书中会介绍正则表达式的起源和基本构成元素...

    正则表达式转换为NFA,dfa,确定化

    确定化是一个关键步骤,特别是当处理大量输入时,因为它可以减少计算时间和资源消耗。确定化NFA的过程中,我们创建一个新的DFA,该DFA与原NFA具有相同的语言,但没有ε-转移。这个DFA的每个状态对应于NFA的一组可能...

    正则表达式宝典,强力推荐

    正则表达式,又称正规表示式、正规表达式或正规演算,是用于匹配字符串的强大工具。在编程和文本处理领域,它被广泛应用于数据验证、搜索与替换、模式匹配等多种任务。这本书《正则表达式宝典》无疑是你深入理解和...

    快速完全精通正则表达式

    - **过程式与面向对象处理**:不同编程范式下正则表达式的使用方式有所不同。 - **搜索与替换示例**:通过具体示例展示如何使用正则表达式进行文本的搜索和替换操作。 - **其他语言中的搜索与替换**:讨论了除了Perl...

    正则式工具(自动生成正则表达式)

    正则式,全称为正则表达式,是计算机科学领域中一种用于匹配字符串的强大工具。它采用一套规则和特殊字符来定义字符串模式,能够高效地处理文本数据,如搜索、替换、验证输入等任务。在编程语言中,正则表达式通常被...

    正则表达式实时测试工具(源码)

    这种工具通常提供一个交互式的界面,允许用户输入待匹配的文本和正则表达式,然后实时展示匹配结果。通过这样的工具,开发者能够快速验证正则表达式的正确性,减少调试时间和错误。 此处提到的"正则表达式实时测试...

    时间正则化矩阵分解_Jupyter Notebook_Python_下载.zip

    时间正则化矩阵分解(Temporal Regularized Matrix Factorization, TRMF)是一种先进的数据分析技术,尤其在推荐系统、时间序列预测和信号处理等领域有着广泛应用。它结合了矩阵分解和时间序列模型,通过引入时间...

    用于 Emeditor 的正则表达式入门

    正则表达式,也称为正则式或简称规则式,是文本处理中的一种强大工具。它通过特定的字符和符号组合来构建一个规则表达式,用于执行模式匹配和文本搜索。正则表达式广泛应用于各种编程语言和文本处理工具中,比如我们...

    验证控件与正则表达式

    正则表达式,又称正规表示式或模式匹配,是一种强大的文本处理工具,用于搜索、替换和提取符合特定模式的字符串。它由一系列字符和特殊符号组成,可以表示非常复杂的数据格式。例如,一个简单的正则表达式"\d{4}-\d{...

    JS匹配日期和时间的正则表达式示例

    这个正则表达式在日期正则表达式的末尾增加了一个空格`(\s+)`和时间正则表达式的开头,以便匹配它们之间可能出现的空白字符。 ### 工具和技巧 文章还提供了一些在线工具和进一步阅读的资源,包括用于测试和生成...

    RegexMatchTracer 正则表达式工具

    RegexMatchTracer就是这样一个辅助工具,它提供了一个交互式的界面,允许用户输入正则表达式并测试它在特定文本上的效果。 `MTracer.exe`是RegexMatchTracer的主要可执行文件,用户可以直接运行来启动这个工具。这...

    正则表达式

    由于某些字符类非常常用,所以JavaScript的正则表达式语法包含一些特殊字符和转义序列来表示这些常用的类.例如, \s 匹配的是空格符,制表符和其它空白符, \s 匹配的则是空白符之外的任何字符. 正则表灰式的字符类 ...

    易语言正则测试工具

    正则表达式,又称正规表示式、正规文法,是用于处理字符串的强大工具,尤其在文本处理、数据提取、验证输入等方面有着广泛的应用。易语言,作为中国本土的编程语言,结合正则表达式的能力,为开发者提供了更为便捷的...

    正则表达式测试工具

    3. **交互式调试**:当正则表达式不起作用时,测试工具通常会提供匹配过程的可视化反馈,显示哪些部分被匹配,哪些部分未被匹配。这对于理解和调试复杂的正则表达式非常有用。 4. **字符集和元字符支持**:正则...

    正则表达式学习 (很实用的)

    正则表达式,又称正规表示式或正则式,是用于匹配字符串的一种强大的模式匹配工具。在编程语言中,正则表达式常被用来进行文本的查找、替换和分割等操作,是处理字符串的重要手段。本资料包"正则表达式学习 (很实用...

    编译原理课设 正则表达式,正规式,NFA,DFA等

    在编译原理的学习中,正则表达式、正规式、NFA(非确定有限自动机)和DFA(确定有限自动机)是四个至关重要的概念,它们构成了形式语言理论的基础,也是编译器设计的核心部分。 正则表达式是描述字符串集合的一种...

    DEELX正则表达式引擎

    通过MTracer 2.0.msi安装文件,用户可以在实际环境中交互式地查看正则表达式的匹配过程,理解其工作原理,从而更好地利用DEELX引擎。 MTracer的特点可能包括: 1. **图形化界面**:MTracer提供直观的用户界面,...

Global site tag (gtag.js) - Google Analytics