匹配日期格式的 RegEx 表达式

RegEx expression that will match Date format

我有一条线 "1999-08-16"^^xsd:date。在 flex 文件中将整个字符串捕获为 "1999-08-16"^^xsd:date 的正则表达式是什么?并且,是否可以仅将“1999-08-16”捕获为字符串。如果是,那么它在 flex 中的正则表达式是什么?

试试这个:

^"(\d{4}-(?:0?[1-9]|1[012])-(?:30|31|[12]\d|0?[1-9]))"\^\^xsd:date$

解释:

  • ^ - 行首
  • \d{4} - 年份部分
  • (?:0?[1-9]|1[012]) - 月,可以是:
    • 01-09 或 1-9(这就是为什么 0?
    • 10,11,12(1[012] 部分)
  • ?: 表示非捕获组(如果我们只需要交替匹配 使用 |,但不将它们输出给用户)
  • (?:30|31|[12]\d|0?[1-9]) - 日部分,可以是:
    • 30,31,
    • 10-29(部分[12]\d
    • 1-9,或 01-09 (0?[1-9])
      我们也使用非捕获组来匹配日期
  • $ 匹配行尾
  • "" 之间的所有内容都被捕获到标准捕获组,因为您需要提取日期

Demo

注意: 匹配天数时,我们将 1-9 天数放在 LAST 交替组中:

(?:30|31|[12]\d|0?[1-9])

这是因为正则表达式引擎在给定交替匹配时使用第一个匹配结果,而忽略其他匹配的替代项。例如- 在字符串 1 11 表达式中:

  • (?:\d{2}|\d) 给出 2 个匹配项
  • (?:\d|\d{2}) 给出 3 个匹配项

要捕获整个字符串 \"[0-9]{4}-[0-9]{2}-[0-9]{2}\"\^\^[^ ]* 可以使用。