2010-02-03 4 views
1

Je sais qu'il y a beaucoup d'analyseur ASN.1 là-bas mais ils coûtent beaucoup et en tant que tel, j'essaie d'écrire le mien.C#: Quelle devrait être l'expression régulière pour cela?

Je suis un peu nouveau à l'expression régulière afin d'extraire le texte pour les espaces réservés A, B, C et D, que devrait être l'expression régulière en C#?

A ::= B 
{ 
    C1 D1, 
    C2 D2, 
    C3 D3 
} 

où A, C et D peut être l'un quelconque mot valide qui se compose d'une combinaison quelconque des

suivant
  • A-Z
  • a-z
  • 0-9
  • _

Et B peut être tous les types ASN.1 tels que "SEQUENCE", "SEQUENCE OF", "CHOICE", "UTF8String", etc. Une liste complète peut être trouvée dans le tableau "Universal Class Tags" à cette link.

+0

S'il vous plaît poster le code que vous avez écrit jusqu'à présent. Les gens n'aiment généralement pas écrire votre code pour vous. –

+1

Avez-vous regardé des implémentations open source, telles que asn1c? –

+0

Allez-vous utiliser cette expression régulière dans le cadre d'un lexer pour un analyseur, ou essayez-vous réellement de l'analyser avec des expressions régulières? –

Répondre

1

Vous voulez dire que vous voulez faire correspondre cette construction entière avec une regex? C'est une mauvaise idée. Les expressions régulières peuvent être utiles en tant que composant d'un analyseur, mais il est préférable de limiter leur rôle au minimum. N'essayez pas de faire correspondre de gros blocs de texte, en particulier des structures récursives ou en boucle. Les expressions rationnelles en C# sont assez puissantes pour gérer de telles choses dans de nombreux cas, mais pas toutes - et cela va bien au-delà du niveau débutant. Je suggère que vous l'essayiez sans employer des regexes du tout. Sinon, vous vous distrayez constamment, en vous demandant comment la technique de regex que vous n'avez pas encore apprise rendrait la tâche actuelle plus facile, ou résoudrait le problème plus élégamment (si vous pardonnez mon langage). Concentrez-vous sur l'écriture solide, lisible, maintenable code - ce qui est une autre faiblesse de regexes.

Questions connexes