से रेखा टिप्पणियों को पट्टी करने के लिए रेगेक्स मैं कुछ सी # कोड से ब्लॉक या लाइन टिप्पणियों को स्ट्रिप करने के लिए नियमित रूप से काम कर रहा हूं। मैंने साइट पर अन्य उदाहरणों को देखा है, लेकिन मुझे सटीक उत्तर नहीं मिला है जिसे मैं ढूंढ रहा हूं।सी #
मैं RegexOptions.Singleline के साथ इस रेगुलर एक्सप्रेशन के उपयोग को पूरी तरह ब्लॉक टिप्पणियां (/ * टिप्पणी * /) से मेल कर सकते हैं:
(/\*[\w\W]*\*/)
और मैं में लाइन टिप्पणियां (// टिप्पणी) से मेल कर सकते हैं उनके संपूर्णता RegexOptions.Multiline के साथ इस रेगुलर एक्सप्रेशन के उपयोग:
(//((?!\*/).)*)(?!\*/)[^\r\n]
नोट: मैं [^\r\n]
बजाय +०१२३१८५२१७० उपयोग कर रहा हूँक्योंकि $
में भी मैच में \r
शामिल है।
हालांकि, यह काफी जिस तरह से मैं चाहता हूं उसे काम नहीं करता है।
यहाँ अपने परीक्षण कोड है कि मैं के खिलाफ मिलान कर रहा हूँ है:
// remove whole line comments
bool broken = false; // remove partial line comments
if (broken == true)
{
return "BROKEN";
}
/* remove block comments
else
{
return "FIXED";
} // do not remove nested comments */ bool working = !broken;
return "NO COMMENT";
ब्लॉक एक्सप्रेशन से मेल खाता
/* remove block comments
else
{
return "FIXED";
} // do not remove nested comments */
जो ठीक है और अच्छा है, लेकिन लाइन एक्सप्रेशन से मेल खाता
// remove whole line comments
// remove partial line comments
और
// do not remove nested comments
इसके अलावा, अगर मैं लाइन अभिव्यक्ति में */सकारात्मक अग्रदर्शी दो बार नहीं है, यह
// do not remove nested comments *
जो मैं वास्तव में नहीं चाहिए मेल खाता है।
क्या मैं चाहता हूँ एक अभिव्यक्ति है कि पंक्ति के अंत में वर्ण से मेल खाएगी, //
के साथ शुरू, है, लेकिन नहीं//
और पंक्ति के अंत के बीच */
शामिल करता है।
इसके अलावा, बस मेरी जिज्ञासा को पूरा करने के लिए, क्या कोई यह समझा सकता है कि मुझे दो बार लुकहेड क्यों चाहिए? (//((?!\*/).)*)[^\r\n]
और (//(.)*)(?!\*/)[^\r\n]
दोनों में *, लेकिन (//((?!\*/).)*)(?!\*/)[^\r\n]
और (//((?!\*/).)*(?!\*/))[^\r\n]
शामिल नहीं होंगे।
क्या आपने यह मामला भी माना है जहां 'स्ट्रिंग foo = "http://stackoverflow.com;" ' –
लालसा के कारण आपका'/* ... */'पैटर्न ओवरमैच, उदा। '/ * टिप्पणी 1 */एक टिप्पणी नहीं पर विचार करें!/* टिप्पणी 2 */'। – polygenelubricants
आप इसके बजाय सी # के लिए एक पार्सर का उपयोग करने पर विचार कर सकते हैं: http://stackoverflow.com/questions/81406/parser-for-c – TrueWill