2017-10-26 4 views
0

正規表現の表現があります:なぜregexp.FindAllStringは不要な空の文字列で一致した結果を返しますか?

302\=.+?190\=(\d|\.)+|` 

と、これは文字列が一致することである。

8=FIX.4.4|9=181|35=i|34=6|49=XCD1|52=20171025-08:33:56.791|56=Q142|296=3|302=5|295=1|299=0|188=0.74499|190=0.74549|302=4|295=1|299=0|188=0.74996|190=0.75026|302=3|295=1|299=0|188=88.751|190=88.801|10=022| 

結果は次のようになります。

302=5|295=1|299=0|188=0.74499|190=0.74549 
302=4|295=1|299=0|188=0.74996|190=0.75026 
302=3|295=1|299=0|188=88.751|190=88.801 

が、それはいくつかの空の文字列で結果を返すことが:

[]string{"", 
     "", 
     "", 
     "", 
     "302=5|295=1|299=0|188=0.74499|190=0.74549", 
     "302=4|295=1|299=0|188=0.74996|190=0.75026", 
     "302=3|295=1|299=0|188=88.751|190=88.801", 
     "", 
     "", 
     "", 
     "", 
     "" 
     .... 
} 

コードは以下の通りです:

string := `8=FIX.4.4|9=181|35=i|34=6|49=XCD1|52=20171025-08:33:56.791|56=Q142|296=3|302=5|295=1|299=0|188=0.74499|190=0.74549|302=4|295=1|299=0|188=0.74996|190=0.75026|302=3|295=1|299=0|188=88.751|190=88.801|10=022|` 
re := regexp.MustCompile(`302\=.+?190\=(\d|\.)+|`) 
re.FindAllString(a1, -1) 

あなたはそれを試すことができます。https://play.golang.org/p/0x_lBAX6Vkため|後続のだ

+0

'(\ d | \。)' ---これは '[\ d。]'で改善されるかもしれません。 '='もエスケープしないでください。 – zerkms

答えて

1

xxx|表現手段は、 - xxxまたは空の文字列です。

文字通り扱われるようにエスケープする必要があります。\|

関連する問題