正则表达式 - 在一个条件下“捕获组等于”

时间:2014-06-24 20:26:57

标签: regex date

我正在编写一个正则表达式来捕获各种日期格式。为了保持简短和灵活,我想将几​​个月,几天和几年的所有可能组合打包到不同的组中。我们假设我有两个这样的日期:

01.01。 - 2013年12月31日

jan - dec 2013

现在,我想要实现的是编写一个捕获两个日期的正则表达式,如上所述。这很简单。但我也希望排除日期,例如那些:

01.01。 - 2013年12月31日

换句话说,每当月份混合时,我都不想要这些日期。此外,如果第一个日期没有一天,我也不希望在第二个日期捕获那一天。

我想构建一个条件,根据第一个日期的相应字段,根据第一个日期中的内容找到(因此,例如,如果第一个日期有一个alpha月,则只查看第二个日期中的alpha月) ,忽略数字)。我的正则表达式看起来像这样:

(?<firstDay>0[1-9]|[12][0-9]|3[01]|[1-9])[-/\s\.](?<firstMonth>0[1-9]|1[012]|[\p{L}]{3,}|[1-9])\s*[-\s/\.]*\s*(?<secondDay>0[1-9]|[12][0-9]|3[01]|[1-9])[-\s/.]*(?<secondMonth>((?<firstMonth>)(?<=0[1-9]|1[012]|[1-9]))(0[1-9]|1[012]|[1-9])|[\p{L}]{3,})[-\s/\.]*(?<year>(19|20)\d\d|[012][0-9]$)

这是所有背景,但我的问题是,是否可以检查捕获的组相等,并基于此构建捕获条件?我在Stack Overflow上发现了一些类似的主题(遗憾的是现在找不到它,但是当我实现它时,它会停止捕获一些正确的日期(例如01.01。 - 31.12.2013)。这就是那个部分:

(?<secondMonth>((?<firstMonth>)(?<=0[1-9]|1[012]|[1-9]))(0[1-9]|1[012]|[1-9])|[\p{L}]{3,})

0 个答案:

没有答案