与日期格式匹配的RegEx表达式

时间:2017-05-14 09:12:43

标签: regex bison flex-lexer

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

2 个答案:

答案 0 :(得分:0)

试试这个:

^"(\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天数放入最后的交替组:

  

(?: 30 | 31 | [12] \ d | <强> 0 [1-9]

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

  • (?:\d{2}|\d)提供2场比赛
  • (?:\d|\d{2})提供3场比赛

答案 1 :(得分:0)

可以使用捕获整个字符串<xsl:for-each select="education">