2013-01-04 2 views
1

J'ai cette chaîne d'entrée:Regex Match.NextMatch() pour une chaîne qui ne correspond pas

AT+CMGL=4\r\r\n+CMGL: 1,1,,155\r\nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH\r\n+CMGL: 2,1,,126\r\nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH\r\n+CMGL: 3,1,,148\r\nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH\r\n\r\nOK\r\n 

Je voudrais faire un match de regex sur celui-ci extraire deux groupes de capture et itérer chaque match avec la méthode NextMatch().

Je peux obtenir une correspondance partielle en excluant le début (AT+CMGL=4\r\r\n) et la fin (\r\nOK\r\n) de cette chaîne qui serait différente pour la première et la dernière itération.

Ceci est l'expression régulière que j'utilise pour le match partiel, je suis en mesure d'atteindre:

\+CMGL: \d+,\d+,,(\d+)\\r\\n(.*?)\\r\\n 

Comment la syntaxe correcte des expressions rationnelles ressemblent à obtenir un match complet?

EDIT: Je souhaite saisir la longueur de PDU (155) et l'unité de distribution lui-même (nDFGDF312GF4J5457JG8J0JGKFJ345G67JHGFGHJ06FD45HJG86J958F4FHSGSDGFH23FJ24HGJH58G4D7D465HDK31HFDJCHGH8V7GD45231DFGF314J567V6GGK4GFJCHGKVGDJX765GHFCJX2X4537CCGHGK9VHJ3C2FJXJCGH) pour chaque NextMatch().

+1

et comment pouvons-nous deviner ce que vous voulez ** ** de ce string..you besoin de préciser que. .also 'regex' est aussi utilisé pour les motifs de motif' régulièrement '** non ** 'irréguliers'! – Anirudha

+0

@ Some1.Kill.The.DJ Je l'ai spécifié dans la section EDIT de la publication. Eh bien, c'est seulement la première et la dernière partie de la chaîne entière qui ne serait pas la même chose, le reste serait un motif d'occurrence régulière. Je pourrais faire un peu de formatage avant d'utiliser la regex, mais je pensais que si c'était possible avec regex, ce serait une solution plus agréable/plus propre ... – jmelhus

+0

regardez ma réponse – Anirudha

Répondre

2

Votre regex est correct..you juste besoin d'utiliser le mode singleline avec le regex

Regex myRegex = new Regex(yourRegex,RegexOptions.IgnoreCase | RegexOptions.Singleline); 
foreach(Match m in myRegex.Matches(yourText)) 
{ 
    m.Groups[1].Value;//pdu length 
    m.Groups[2].Value;//pdu buffer 
} 
Questions connexes