2017-07-20 57 views
1

我有一個包含這個文件:正則表達式中,選擇第N匹配

<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>。 (第1比賽:INC000012486615,第二場比賽abcd-efg-hij4-en:ddcs等)

我沒有成功修改我的正則表達式,您可以在此link

我希望能夠選擇使用正則表達式的第n個匹配測試。有什麼建議麼 ? PS:我必須使用正則表達式。 Splunk字段提取。

+1

[**不要使用正則表達式解析XML **](https://stackoverflow.com/a/1732454/ 1954610)。使用解析器。 –

+0

你好。我必須在Splunk字段提取器中使用Regex。此外,該文件結構不良xml。所以我不能使用XML解析器。 – belas

+0

你的意思是「結構不好」?你提供的例子似乎很好。我不熟悉'splunk',但是一個快速的谷歌告訴我你可以使用'spath'來解析XML? http://docs.splunk.com/Documentation/Splunk/6.0/SearchReference/Spath –

回答

2

嘗試如果該模式返回3TH數據值:

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

的\ K被用於確保所述圖案之前,它是不匹配的字符的一部分。

0

這是錯誤的方法。而不是寫一個草率的正則表達式來捕獲所有的值,這將是更好地使kv_mode在props.conf

如果在集羣環境不受,去你的集羣主設備和編輯props.conf到KV_MODE = xml

在非羣集環境,去你的索引(S),並添加KV_MODE屬性