Ruby Regexp匹配前一个xml标记中的数据

时间:2015-04-11 16:24:36

标签: ruby regex xml

我的日志文件是这样的,

2015-04-10 19:10:39,688 INFO  [abc] Reqt [283183]: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Data>..<Name>EVENT_1</Name>..</Data>

2015-04-10 19:10:39,688 INFO  [abc] Req [283184]: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Data>..<Name>MY_EVENT</Name>..</Data>

正则表达式我写的是,

pFile    = File.read("C:/logs/pdata.log")
Regex = /<Data>(.*?)MY_EVENT(.*?)<\/Data>/m
pData    = pFile.match(Regex).to_s

&#34; MY_EVENT&#34;可能会出现在第一个xml标记或第二个xml标记中,甚至可能最终基于该方案。 如果它出现在第一个标签中,正则表达式工作正常,如果它出现在第二个标签中,它匹配第一个标签,我的输出就像,

<Data>..<Name>EVENT_1</Name>..</Data>
2015-04-10 19:10:39,688 INFO  [abc] Req [283184]: <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Data>..<Name>MY_EVENT</Name>..</Data>

我只需要提取一个包含MY_EVENT的xml标签。 请帮我解决这个问题!提前致谢

1 个答案:

答案 0 :(得分:0)

试试这个。

pData.match(/<Data>((?!<Data>).)*?MY_EVENT((?!<Data>).)*?<\/Data>/m)

我假设所有<Data>元素都不会包含另一个<Data>作为其子元素。