Wie man Kommentare im C-Stil aus dem Code entfernt

Ich habe gerade eine neue Frage hier auf SO gelesen, die im Grunde das Gleiche fragt wie meine im Titel. Das brachte mich zum Nachdenken - und zum Durchsuchen des Webs (die meisten Treffer deuteten natürlich auf SO hin;). Also dachte ich

Es sollte eine einfache Regex geben, mit der Kommentare im C-Stil aus jedem Code entfernt werden können.

Ja, es gibt Antworten auf diese Frage / Aussage zu SO, aber die, die ich gefunden habe, sind alle unvollständig und / oder zu komplex.

So fing ich an zu experimentieren und fand einen, der mit allen Arten von Code funktioniertI kann mir vorstellen

(?:\/\/(?:\\\n|[^\n])*\n)|(?:\/\*(?:\n|\r|.)*?\*\/)|(("|')(?:\\\\|\\\2|\\\n|[^\2])*?\2)

Die erste Alternative sucht nach Doppelter Schrägstrich // Bemerkungen. Die Sekunde fürgewöhnlich Einsen/* comment */. Die dritte ist, was ich Probleme hatte, andere Regex zu finden, die sich mit der gleichen Aufgabenbehandlung befassen -strings, die Zeichenfolgen enthalten, die sich außerhalb der Zeichenfolge befinden, werden als Kommentare betrachtet..

Dieser Teil erfasst alle Zeichenfolgen in Erfassungsgruppe 1, die mit dem Anführungszeichen in Erfassungsgruppe 2 bis zum Ende der Zeichenfolge in Anführungszeichen stehen.

Capture Group One sollte in der Ersetzung behalten werden, alles verworfen (ersetzt für"") unkommentierten Code hinterlassen:).

Hier ist ein C-Beispiel für regex101.

OK ... Das ist also keine Frage. Es ist eine Antwort, die Sie denken ...

Ja, du hast Recht. Also ... weiter zur Frage.

Habe ich irgendeine Art von Code verpasst, den diese Regex vermissen würde?

It behandelt

multi line comments

/*
    an easy one
*/

"Zeilenende" Kommentare

// Remove this

kommentare in strings

char array[] = "Following isn't a comment // because it's in a string /* this neither */";

was dazu führt - Zeichenfolgen mit Anführungszeichen

    char array[] = "Handle /* comments */ - // - in strings with \" escaped quotes";

und Zeichenfolgen mit Escapezeichen

    char array[] = "Handle strings with **not** escaped quotes\\"; // <-EOS

javscript String in Anführungszeichen

var myStr = 'Should also ignore enclosed // comments /* like these */ ';

Linienfortsetzung

// This is a single line comment \
continuing on the next row (warns, but works in my C++ flavor)

So,önnen Sie sich Code-Fälle vorstellen, die dies vermassel Wenn Sie welche finden, werde ich versuchen, die RE zu vervollständigen, und hoffentlich endet sieKomplet;)

Grüße

PS. Ich weiß ... Schreibe dies in den rechten Bereich unterWie man @ fra: Wir bevorzugen Fragen, die beantwortet und nicht nur besprochen werden können. Diese Frage könnte das verletzen: S aber ich kann nicht widerstehen.

In der Tat kann sich herausstellen, dass es für manche eine Antwort statt einer Frage ist. (Zu übermütig?;)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage