2017-10-19 3 views
-3

Je veux saisir quoi que ce soit après les FF mais ne pas inclure les FF.Besoin d'aide pour écrire une expression régulière

[ 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] 

Je voudrais que les deux matches suivants:

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

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

je suis venu avec cela, mais il ne les saisit pas en deux matches. Je pense aussi que c'est un peu long pour un motif.

(?!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

Regex ne ressemble pas à la bonne solution –

Répondre

2

Avec cette regex vous devrez découper un espace de fuite des résultats:

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

Explication

((
    [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 

Ce modèle décrit séquences de 2 chiffres, il x nombres à l'exclusion du nombre 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()); 
} 

Ma solution précédente a renvoyé le 2 correspond vous avez demandé. Si vous avez simplement tous les nombres hexadécimaux un par un en sautant tous les FF, vous pouvez effectuer une recherche comme celui-ci

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

Merci, l'espace supplémentaire est correct puisque je divise la chaîne par des espaces de toute façon pour obtenir un tableau d'octets. –

+0

Dans ce cas, vous pouvez simplement utiliser '[A-E0-9] [A-F0-9] | [A-F0-9] [A-E0-9]'. Cela donnera directement les nombres hexadécimaux un par un en sautant tous les FF. Pas besoin de se séparer après. –

0

Essayez suivante:

  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

Ou essayez ma solution

(?<=FF\s)([0-9A-E][0-9A-F]|[0-9A-F][0-9A-E]|\s?)+((?<=$)|(?<=\s))