2017-10-19 22 views
-3

私はFFの後に何かをつかみたいが、FFは含めない。正規表現を書くのに助けが必要

82 DD E6 0F 59 EF 9B 0F 00 

82 A6 06 2C 81 FD 32 00 40 6B 

私はこの思い付いたけど、それは2試合でそれらをつかむません。

[ 4xFF 82 DD E6 0F 59 EF 9B 0F 00 FF FF FF FF FF 82 A6 06 2C 81 FD 32 00 40 6B] 

だから私は、次の2試合をしたいと思います。

もう少し長くパターンに巻き込まれていると思います。

(?!FF)((\d\d)|(\d[A-Z|a-z])|([A-Z|a-z]\d)|([A-Z|a-z][A-Z|a-z]))((\d\d)|(\d[A-Z|a-z])|([A-Z|a-z]\d)|([A-Z|a-z][A-Z|a-z])) 
+0

私の解決策を試すことができます正規表現は、適切なソリューションのように見えません –

答えて

2

この正規表現を使用すると、結果から末尾のスペースをトリミングする必要があります。このパターンは説明

(([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E])\s?)+ 

説明

((
    [0-9A-E][0-9A-F]  A hex digit excluding "F", followed by a hex digit 
    |      or 
    [0-9A-F][0-9A-E]  A hex digit, followed by a hex digit excluding "F" 
) 
\s?     an optional space 
)+      The whole pattern repeated at least once 

2桁の配列×FF数を除いた数。

string pattern = @"(([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E])\s?)+"; 
var matches = Regex.Matches(input, pattern); 
foreach (var match in matches) { 
    Console.WriteLine(match.Value.TrimEnd()); 
} 

私の以前のソリューションは、あなたが要求した2試合を返されました。あなたは、単にすべてのFFを飛ばしにより1すべて16進数の1を必要とする場合は、この

string pattern = "[0-9A-E][0-9A-F]|[0-9A-F][0-9A-E]"; 
var matches = Regex.Matches(input, pattern); 
foreach (var match in matches) { 
    Console.WriteLine(match.Value); 
} 
+0

ありがとう、余分なスペースは、バイトの配列を取得するために空白で文字列を分割しているので、問題ありません。 –

+0

その場合は '[A-E0-9] [A-F0-9] | [A-F0-9] [A-E0-9]'を使うだけです。これは、すべてのFFをスキップして1つずつ直接16進数を出力します。後で分割する必要はありません。 –

0

次試してみてください。

  string input = "[ 4xFF 82 DD E6 0F 59 EF 9B 0F 00 FF FF FF FF FF 82 A6 06 2C 81 FD 32 00 40 6B]"; 
      string pattern = @"(?'prefix'(\sFF)+)\s(?'capture'[^\]]+)"; 

      Match match = Regex.Match(input,pattern); 

      Console.WriteLine(match.Groups["capture"].Value); 
      Console.ReadLine(); 
0

のように検索したり、

(?<=FF\s)([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E]|\s?)+((?<=$)|(?<=\s)) 
関連する問題