正则表达式,select 第 N 场比赛
Regex, select Nth match
我有一个包含以下内容的文件:
<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>
我写了一个正则表达式 selects 有价值的信息:(?<=<Data[^>]*>)((.|\n)*?)(?=<\/Data>)
:只有 selects 里面的数据 <Cell><Data>
。您可以在此 link
上进行测试
我希望能够 select 使用 Regex 的第 n 个匹配项:(第一个匹配项:INC000012486615
,第二个匹配项 abcd-efg-hij4-en:ddcs
,等等)
我没有成功修改我的正则表达式。有什么建议吗?
PS:我必须使用正则表达式。用于 Splunk 字段提取。
如果此模式 returns 第 3 个数据值:
,请尝试
<Row>(?:\s*(?:<\/Data>\s*<\/Cell>\s*)?<Cell[^<>]*>\s*<Data\b[^<>]+>\K([^<>]*)){3}
\K 用于确保它之前的模式不是匹配字符的一部分。
这是错误的做法。与其编写草率的正则表达式来捕获所有值,不如在 props.conf
中启用 kv_mode
如果您处于集群环境中,请转至您的集群主机并将 props.conf 编辑为 KV_MODE = xml
在非集群环境中,转到您的索引器并添加 KV_MODE 属性
我有一个包含以下内容的文件:
<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>
我写了一个正则表达式 selects 有价值的信息:(?<=<Data[^>]*>)((.|\n)*?)(?=<\/Data>)
:只有 selects 里面的数据 <Cell><Data>
。您可以在此 link
我希望能够 select 使用 Regex 的第 n 个匹配项:(第一个匹配项:INC000012486615
,第二个匹配项 abcd-efg-hij4-en:ddcs
,等等)
我没有成功修改我的正则表达式。有什么建议吗?
PS:我必须使用正则表达式。用于 Splunk 字段提取。
如果此模式 returns 第 3 个数据值:
,请尝试<Row>(?:\s*(?:<\/Data>\s*<\/Cell>\s*)?<Cell[^<>]*>\s*<Data\b[^<>]+>\K([^<>]*)){3}
\K 用于确保它之前的模式不是匹配字符的一部分。
这是错误的做法。与其编写草率的正则表达式来捕获所有值,不如在 props.conf
中启用 kv_mode如果您处于集群环境中,请转至您的集群主机并将 props.conf 编辑为 KV_MODE = xml
在非集群环境中,转到您的索引器并添加 KV_MODE 属性