正则表达式,选择第N个匹配

时间:2017-07-20 09:47:51

标签: regex splunk

我有一个包含此文件的文件:

<Row>
<Cell><Data ss:Type="String">INC000012486615</Data></Cell>
<Cell><Data ss:Type="String">abcd-efg-hij4-en:ddcs</Data></Cell>
<Cell><Data ss:Type="String">fs-hubraum-apps:kayw-de</Data></Cell>
<Cell><Data ss:Type="String">mn-def-seb01:sfyc-en</Data></Cell>
<Cell><Data ss:Type="String">00055s4dEN</Data></Cell>
<Cell><Data ss:Type="String"></Data></Cell>
<Cell><Data ss:Type="String">General Information</Data></Cell>
<Cell ss:StyleID="ce2"><Data  ss:Type="DateTime">2017-06-28T16:24:35</Data>
</Cell><Cell><Data ss:Type="String">Public</Data></Cell>
<Cell><Data ss:Type="String">Hi John,
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Thanks,
Snow</Data></Cell>  
</Row>

我编写了一个正则表达式,用于选择有价值的信息:(?<=<Data[^>]*>)((.|\n)*?)(?=<\/Data>):仅选择<Cell><Data>内的数据。您可以对此link

进行测试

我希望能够使用正则表达式选择第n场比赛:(第一场比赛:INC000012486615,第二场比赛abcd-efg-hij4-en:ddcs等。)

我没有成功修改我的正则表达式。有什么建议吗?

PS:我必须使用正则表达式。对于Splunk Field提取。

2 个答案:

答案 0 :(得分:2)

尝试此模式返回第3个数据值:

<Row>(?:\s*(?:<\/Data>\s*<\/Cell>\s*)?<Cell[^<>]*>\s*<Data\b[^<>]+>\K([^<>]*)){3}

\ K用于确保之前的模式不是匹配字符的一部分。

答案 1 :(得分:0)

这是错误的做法。不是编写一个草率的正则表达式来捕获所有值,而是在props.conf中启用kv_mode会更好

如果您在群集环境中,请转到群集主服务器并将props.conf编辑为KV_MODE = xml

在非群集环境中,转到索引器并添加KV_MODE属性