0

如何使用这段 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 文件),并且出于性能原因,我无法反序列化所有文件。

4

2 回答 2

1

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

于 2013-04-24T14:55:00.887 回答
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 正则表达式可以任意复杂。“。*”就足够了:-)

于 2013-04-24T15:02:44.517 回答