Gå til innhold

Ta vekk kommentarer med Regex


Anbefalte innlegg

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 av GeirGrusom
Lenke til kommentar
Videoannonse
Annonse

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 av GeirGrusom
Lenke til kommentar

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 :p

http://www.regular-expressions.info/repeat.html

Endret av Wubbable
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...