我在配置单元查询的create表中遇到input.regex语句问题,该语句导致一个字段中的部分数据被部分填充到另一个字段中。
日志文件包含一个请求和一个应答事务,但在应答事务中,有一个名为heartbeat的列,其中包含请求事务中不存在的以毫秒为单位的时间戳。hearbeat数据可以包含一个带有小数位的时间戳,有时为零,例如“31.2498ms”或“0ms”,这是我在regex中需要的。
问题是它不处理不包含心跳的请求事务,并且在数据中,它不包含心跳所在的额外空间,因此regex从sessionkey字段获取前几个值并将其填充到心跳中。
因此,预期的结果是heartbeat字段不包含所有请求事务的数据,sessionkey数据保持不变。
我在下面包含了regex和数据示例以及rebular的屏幕截图,这些截图以黄色突出显示了问题。
正则表达式
(^[0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([0-9]* [0-9]* [0-9]*) ([^ ]*)(?:[:]) ([0-9]+.[0-9]+|[0-9]|)(?:ms |)([^ ]*)(?:[:])(.*$)
结构
Version = 0
EventTime = 20140625095038615
LogTime = 20140625095038646
SequenceNumber = 0000
Level = 006
InternalArea = 00/0000/000
MachineName = LSEMPPRD
ApplicationName = Nestra
DiscardedMessageCount = 000 000000 00
TranType = Reply:
Heartbeat = 296.4057ms
SessionKey = d594891a-6d9c-4b5c-913a-9dc302277534:
Message = <GetInfo xmlns="http://tempuri.org/"><terminalSession xmlns:b="
交易类型示例
0 20140622104758792 20140622104758792 0000 006 00/0000/000 LSEMPPRD Nestra 000 000000 00 Request: 5a0a48b9-8b7d-4174-bdd5-55673affb825: <GetInfo xmlns="http://tempuri.org/"><terminalSession xmlns:b="http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Common" <b:SessionKey>17789cc9-6bc8-4c4b-85d2-b86b21af0fb3</b:SessionKey></terminalSession></GetInfo>
0 20140622104758792 20140622104758792 0000 006 00/0000/000 LSEMPPRD Nestra 000 000000 00 Reply: 0ms 5a0a48b9-8b7d-4174-bdd5-55673affb825: <GetInfo xmlns="http://tempuri.org/"><GetInfoResult xmlns:b="http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Responses" </GetInfoResult></GetInfoResponse>
0 20140622104758792 20140622104758792 0000 006 00/0000/000 LSEMPPRD Nestra 000 000000 00 Reply: 31.2498ms 5a0a48b9-8b7d-4174-bdd5-55673affb825: <GetInfo xmlns="http://tempuri.org/"><GetInfoResult xmlns:b="http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Responses" </GetInfoResult></GetInfoResponse>
3条答案
按热度按时间oo7oh9g91#
完成正则表达式:(小心地注意空格)
验证:
输入:
输出:1号线
第2行
第3行
wlp8pajw2#
看起来像是
Reply:
以及Request:
字段总是出现在这些日志事务中(一个或另一个)。可以在正则表达式中使用|
或语法的运算符:我使用regexhero(有许多在线测试人员)在您的示例数据上测试了上述内容。它显示了replace表达式的以下输出
$12, $13, $14, $15
指的是捕获的组号:所以,如果捕获组$12是“回复”,那么您知道字段
Heartbeat
在组$13中,否则该记录是请求事务。ryevplcw3#
更新的输入行:(4)
单个regex可以处理以上4种类型的日志:
验证@http://rubular.com/:(1、2、3号线见以上ans)4号线卡扣