Ruby Regexp匹配前一个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

“MY_EVENT”可能位于第一个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)

2 years ago

试试这个 .

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

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