2011-05-26 19 views
6

Tôi cần một regex C# để xóa mọi thứ giữa /**/ bao gồm /**/. Vì vậy, về cơ bản xóa tất cả các nhận xét mã trong văn bản đã cho.biểu thức chính quy cần thiết để xóa C/C# comments

+1

bạn thực sự không cần regex cho điều đó. –

+0

Vậy câu hỏi là gì? – Reniuz

+1

Đó không phải là dễ dàng. Mã của bạn có thể chứa các chuỗi như "This:/* boo */is no comment". – Jens

Trả lời

6

nên được một cái gì đó như thế này:

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

regex.Replace(input, ""); 
2

Hãy cảnh giác rằng ý kiến ​​có thể được lồng vào nhau. Nếu nhận xét có thể được lồng vào nhau như trong SQL, thì regex cơ bản sẽ trông giống như sau:

/\*.*?\*/ 

Sau đó, bạn sẽ cần phải lặp lại cho đến khi bạn không có gì.

Nếu, ngược lại, ý kiến ​​kết thúc vào * đầu tiên/như trong C, bạn cần tham lam với một lookahead tiêu cực:

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

Tôi cũng cần phải bỏ qua dòng ý kiến ​​với các hình thức

// blablabla 

vì vậy, chỉ cần cho nếu ai đó cũng cần cái này, sửa đổi regex bằng cách thêm phần cuối | (//.*) nên hình thức hoàn chỉnh sẽ là:

(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*) 
Các vấn đề liên quan