2011-05-26 15 views
6

Potrzebuję wyrażeń regularnych C# do usunięcia wszystkiego między /* i */, w tym /**/. Zasadniczo usuń wszystkie komentarze do kodu w podanym tekście.wyrażenie regularne potrzebne do usunięcia komentarzy C/C#

+1

naprawdę nie potrzebujesz do tego celu. –

+0

Jakie jest więc pytanie? – Reniuz

+1

To nie jest takie łatwe. Twój kod może zawierać ciągi takie jak "This:/* boo */is no comment". – Jens

Odpowiedz

6

powinno być coś takiego:

var regex = new Regex("/\*((?!\*/).)*\*/", RegexOptions.Singleline); 

regex.Replace(input, ""); 
2

Bądź ostrożny, że komentarze mogą być zagnieżdżone. Jeśli komentarze mogą być zagnieżdżone jak w SQL, podstawowa regex będzie wyglądać następująco:

/\*.*?\*/ 

Będziesz wtedy trzeba pętli dopóki nie jesteś nic rozbiórki.

Jeśli, przeciwnie, komentarze końca pierwszego */jak w C, trzeba ją chciwy z ujemnym uprzedzona:

/\*((?!\*/).)*\*/ 
0

Byłem też konieczności ignorować linii komentarze z postaci

// blablabla 

więc, jeśli ktoś tylko trzeba to również modyfikować regex dodając ostatnią część | (//.*) tak pełna forma będzie:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*) 
Powiązane problemy