正则表达式匹配日期

时间:2013-04-24 14:48:41

标签: xml regex

如何通过这段xml中的正则表达式找到有效期的开始和结束?

<Response>
  <Identification v="XXXXX"/>
  <Type v="YYY"/>
  <CreationDateTime v="2013-01-18T10:00:00Z"/>
  <ValidityPeriod v="2013-01-21T05:00Z/2013-01-22T05:00Z"/>
 <The rest of the file i'm not iterested in..../>

到目前为止,我找到 [1-9] [0-9] {3} - 。+?T。+?Z /.+?Z 来查找属性值并拆分两个日期字符串中的字符串。 或者使用 [1-9] [0-9] {3} - 。+?T [^。] +?(Z | [+ - ]。+)并查找三个日期并仅使用最后两个

但是如何找到两个不同日期的确切两场比赛。

我必须从存档中提取一些xml文件(包含很多大型XML文件),出于性能原因,我无法反序列化所有文件。

2 个答案:

答案 0 :(得分:1)

使用JDOM或其他XML解析语言而不是正则表达式。它将简化解析此文本。或者,您知道该元素名为“CreationDateTime”,您知道该属性名为“v”,并且您知道该值包含在双引号内。您可以使用所有这些信息来利用字符串拆分来解析它,以便更轻松地获取您感兴趣的行和值。

答案 1 :(得分:0)

尝试:

my $d = qr([1-9][0-9]{3}-.+?T.+?Z);
my ($d1, $d2) = ($xml =~ /ValidityPeriod v=\"($d)\/($d)\"/);
print "$d1 $d2\n" if $d1;

$ d regexp可以像你想要的那样复杂。 “。*”就够了: - )