我需要從大型日誌文件中提取所有FIX消息,這些消息可能包含10000到20000個FIX協議消息。 FIX協議消息,我期望獲取將從8=FIX
開始,並以|10=
一些CheckSum值可能是任何值,然後是分隔符'|'
。從正則表達式中的日誌文件解析FIX協議消息?
例如8=FIXT.1.1|9=449|35=AE|34=1734|49=REPOFIXUAT|52=20140402-11:38:34|56=TR_UAT_VENDOR|1128=8|15=GBP|31=1.7666|32=50000000.00|55=GBP/USD|60=20140402-11:07:33|63=B|64=20140415|65=OR|75=20140402|150=F|167=FOR|194=1.7654|195=0.0012|460=4|571=7852455|1003=2 USD|1056=88330000.00|1057=N|552=1|54=2|37=20140402-12:36:48|11=NOREF|453=4|448=ZERO|447=D|452=3|448=MBY2|447=D|452=1|448=LMEB|447=D|452=16|448=DOR|447=D|452=11|826=0|78=1|79=default|80=50000000.00|5967=88330000.00|10=111|
目前,我使用這個模式的正則表達式
Pattern pattern = Pattern.compile("8=FIX(.*?)10=(.*?)|");
但上面的圖案,我只能夠提取的消息,直到10=
但不校驗值,也可能有這樣一個場景,一些FIX消息自定義標籤就像8410 = TEST |如下:
8=FIXT.1.1|9=73|35=0|34=560|49=RTNSFIXUAT|8410=TEST|52=20140403-01:50:21|56=TR_UAT_VELOCITY|1128=8|10=206|
這裏以上,我會得到的值
「8 = FIXT.1.1 | 9 = 73 | 35 = 0 | 34 = 560 | 49 = RTNSFIXUAT | 84" (X - 我想,直到標籤10校驗和值完整消息206)
請查找日誌文件摘錄如下:
>02-04-14 11:38:33.559|QFJ Message Processor|input/REPOFIXInput1|INFO|quickfix.outgoing: 8=FIXT.1.1|9=71|35=0|34=1731|49=TR_UAT_VENDOR|52=20140402-11:38:33.557|56=REPOFIXUAT|10=147|
02-04-14 11:38:34.713|SocketConnectorIoProcessor-1.0|input/REPOFIXInput1|INFO|quickfix.incoming: 8=FIXT.1.1|9=449|35=AE|34=1734|1128=8|49=REPOFIXUAT|56=TR_UAT_VENDOR|52=20140402-11:38:34|552=1|54=2|37=20140402-12:36:48|11=NOREF|826=0|78=1|79=default|80=50000000.00|5967=88330000.00|453=4|448=ZERO|452=3|447=D|448=MBY2|452=1|447=D|448=LMEB|452=16|447=D|448=DOR|452=11|447=D|571=7852455|1003=2 USD|150=F|32=50000000.00|15=GBP|1056=88330000.00|31=1.6666|194=1.6654|195=0.0012|64=20140415|63=B|60=20140402-11:07:33|75=20140402|1057=N|460=4|167=FOR|65=OR|55=GBP/USD|10=111|
02-04-14 11:38:35.004|QFJ Message Processor|input/REPOFIXInput1|INFO|Received FIX application message: 8=FIXT.1.1|9=449|35=AE|34=1734|49=REPOFIXUAT|52=20140402-11:38:34|56=TR_UAT_VENDOR|1128=8|15=GBP|31=1.7666|32=50000000.00|55=GBP/USD|60=20140402-11:07:33|63=B|64=20140415|65=OR|75=20140402|150=F|167=FOR|194=1.7654|195=0.0012|460=4|571=7852455|1003=2 USD|1056=88330000.00|1057=N|552=1|54=2|37=20140402-12:36:48|11=NOREF|453=4|448=ZERO|447=D|452=3|448=MBY2|447=D|452=1|448=LMEB|447=D|452=16|448=DOR|447=D|452=11|826=0|78=1|79=default|80=50000000.00|5967=88330000.00|10=111|
在NIX系統中使用'cut'命令或在Windows上使用cygwin。也許是2分鐘的工作。 – DumbCoder