GeirGrusom Skrevet 29. mars 2009 Del Skrevet 29. mars 2009 (endret) Hei Jeg sitter og skriver et program som skal auto-wrappe C/C++ biblioteker til C# Foreløpig holder jeg på med preprocessoren, den er nesten ferdig, men jeg får ikke til en regex som tar bort multi-linje kommentarer. Jeg bruker /\*.*\*/ Men det funker ikke... Jeg bruker //.*$ til linje-kommentarer, og det funker fint... Endret 29. mars 2009 av GeirGrusom Lenke til kommentar
Glenn F. Henriksen Skrevet 29. mars 2009 Del Skrevet 29. mars 2009 Punktum matcher ikke linjeskift. Prøv denne: /\*[\w\s]*\*/ Lenke til kommentar
GeirGrusom Skrevet 29. mars 2009 Forfatter Del Skrevet 29. mars 2009 (endret) Du har rett i det. Men det hjalp ikke, fordi kommentarer kan inneholde andre ting en word og whitespace. Men tusen takk for hjelpa, du satte meg ihvertfall nærmere målet Denne sier at . matcher newline hvis Singleline blir satt, men da kommer det et litt snodig problem.. Kode filen inneholder eksempelvis dette #ifndef DENNE_HEADER_FILA #define DENNE_HEADER_FILA /* kommentarer lahrgilhergiluhaerlighuaerg aerliguhaeriguhaerigluhaerg iluhaergliuhaerlgiuhaerligu */ noe_kode(); /* flere kommentarer lihaergøoihaerlgiuhaeliurhg arelgknaerlgihaerlgiuhaergi */ #endif Det jeg synes er fnodig nå, er at det jeg sitter igjen med er følgende (ved replace) #ifndef DENNE_HEADER_FILA #define DENNE_HEADER_FILA #endif Med andre ord så tok den den første /* den fant, og matchet til den siste */ Hvorfor skjer det?... litt uventet oppførsel synes jeg... Endret 29. mars 2009 av GeirGrusom Lenke til kommentar
Wubbable Skrevet 29. mars 2009 Del Skrevet 29. mars 2009 (endret) Nå vet jeg fint lite om regex, men er det ikke noe som heter lazy match (elns) og en annen match (som ikke er lazy) Lazy: Finner den første /*, og matcher så lite som mulig. (På en måte IndexOf) Ikke lazy: Finner den første /*, og matcher så mye som mulig. (På en måte LastIndexOf) edit: Greedy og lazy var det http://www.regular-expressions.info/repeat.html Endret 29. mars 2009 av Wubbable Lenke til kommentar
GeirGrusom Skrevet 29. mars 2009 Forfatter Del Skrevet 29. mars 2009 Mulig du er inne på noe. Jeg gjorde uttrykket lazy, men da sluttet den å fungere igjen... hmmmm.. /\*.*?\*/ Lenke til kommentar
Glenn F. Henriksen Skrevet 30. mars 2009 Del Skrevet 30. mars 2009 Denne fungerer for meg med det eksempelet du hadde: new Regex( "/\\*.*?\\*/", RegexOptions.Singleline ); Full test kode: using System; using System.Collections.Generic; using System.Text.RegularExpressions; public class MyClass { public static Regex regex = new Regex( "/\\*.*?\\*/", RegexOptions.Singleline ); public static string InputText = "#ifndef DENNE_HEADER_FILA\n" + "#define DENNE_HEADER_FILA\n" + "\n" + "/* kommentarer\n" + "lahrgilhergiluhaerlighuaerg\n" + "aerligu* () \"#\"(/U¤#/(!\"¤¤/(\"!¤()¤\"(/)¤%%haeri( ) + -guhaerigluhaerg\n" + "iluhaergliuhaerlgiuhaerligu\n" + "*/\n" + "\n" + "noe_kode();\n" + "\n" + "/* flere kommentarer\n" + "lihaergøoihaerlgiuhaeliurhg\n" + "arelgknaerlgihaerlgiuhaergi\n" + "*/\n" + "#endif\n" + " \n"; public static void RunSnippet() { // Replace the matched text in the InputText using the replacement pattern string result = regex.Replace(InputText,""); WL(result); } #region Helper methods // Fjernet Snippet compiler hjelpemetoder som ikke er viktige #endregion } Resultat: #ifndef DENNE_HEADER_FILA #define DENNE_HEADER_FILA noe_kode(); #endif Lenke til kommentar
GeirGrusom Skrevet 30. mars 2009 Forfatter Del Skrevet 30. mars 2009 Ah, ja da funket det ^^ Jeg hadde sikkert blingset på et tegne eller noe, får det funket nå tusen takk for hjelpen! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå