Parse código CIL con Regex

Tengo un archivo * .il Quiero encontrar todos los métodos no vacíos en él (.method). Por ejemplo:

.class private auto ansi beforefieldinit MyApp.Program extends [mscorlib]System.Object { //catch its body .method private hidebysig static void Main(string[] args) cil managed { .entrypoint // .maxstack 8 IL_0000: nop IL_0001: ret } //catch its body .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } //don't touch, it's empty .method public hidebysig newslot virtual instance string Invoke(string a) runtime managed { } //...................................... } 

Ahora estoy haciendo eso usando una cadena de clase. Es bastante no racional. Intenté usar Regex pero no pude averiguar cómo crear una expresión reg para capturar solo

  • métodos (y no clases)
  • Sólo métodos con cuerpo no vacío.

¿Alguien me puede ayudar?

No se recomienda el uso de expresiones regulares para analizar el código de la estructura y es una mala práctica

Trate de usar regex patrón

 (\.method\s[^{]+?)(?=\s*{)(?!\s*{\s*}) 

Pruébalo aquí .

Para capturar también el cuerpo {...} de cada método, use el patrón regex

 (\.method\s[^{]+{(?!\s*}).*?}) 

Pruébalo aquí .


Para obtener más información sobre las expresiones regulares, visite regular-expressions.info