Как удалить комментарии в стиле C из кода

Я только что прочитал новый вопрос здесь о SO, задавая в основном то же самое, что и мой в названии. Это заставило меня задуматься - и искать в Интернете (большинство хитов указывало на SO, конечно;). Так что я подумал -

Должно быть простое регулярное выражение, способное удалять комментарии в стиле C из любого кода.

Да, есть ответы на этот вопрос / утверждение о SO, но те, которые я нашел, все неполные и / или слишком сложные.

Поэтому я начал экспериментировать и придумал тот, который работает со всеми типами кода.I может себе представить:

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

Первые альтернативные проверки длядвойная косая черта // Комментарии. Второй дляобычный те,/* comment */, В-третьих, у меня возникли проблемы с поиском других регулярных выражений, имеющих дело с той же обработкой задач -строки, содержащие последовательности символов, которые вне строки, будут считаться комментариями.

Эта часть выполняет захват всех строк в первой группе захвата, сопоставляя знак кавычки во второй группе захвата с кавычками до конца строки.

Первая группа должна быть заменена, все выброшено (заменено на"") оставляя без комментариев код :).

Вот пример C на regex101.

ОК ... Так что это не вопрос. Это ответ, который вы думаете ...

Да, ты прав. Итак ... к вопросу.

Я пропустил какой-либо код, который пропустит это регулярное выражение?

Это обрабатывает

многострочные комментарии

/*
    an easy one
*/

комментарии в конце строки

// Remove this

комментарии в строках

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

который приводит к - строки с экранированными кавычками

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

и струны с побегами

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

строка в одинарных кавычках

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

продолжение строки

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

Так,Можете ли вы вспомнить какие-либо случаи кода, которые портят это? Если вы придумали что-нибудь, я постараюсь завершить RE, и, надеюсь, это закончитсяполный ;)

С уважением.

PS. Я знаю ... Запись этого написана на правой панели подКак спросить: Мы предпочитаем вопросы, на которые можно ответить, а не просто обсудить. Этот вопрос может нарушать это: S, но я не могу устоять.

Фактически, это может даже оказаться ответом, а не вопросом, для некоторых людей. (Слишком дерзкий?;)

Ответы на вопрос(1)

Ваш ответ на вопрос