Я работаю над подпрограммой, чтобы снимать комментарии блоков или строк от некоторого кода С#. Я просмотрел другие примеры на сайте, но не нашел точного ответа, который я ищу.
Я могу полностью комбинировать комментарии блоков (/* comment */), используя это регулярное выражение с помощью 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
Кроме того, если у меня нет двунаправленного выражения */positive в выражении линии, оно соответствует
// do not remove nested comments *
который я действительно не хочу.
Я хочу это выражение, которое будет соответствовать символам, начиная с //
, до конца строки, но не содержит */
между //
и концом строки.
Кроме того, чтобы удовлетворить мое любопытство, может ли кто-нибудь объяснить, почему мне нужен просмотр дважды? (//((?!\*/).)*)[^\r\n]
и (//(.)*)(?!\*/)[^\r\n]
будут включать в себя *, но (//((?!\*/).)*)(?!\*/)[^\r\n]
и (//((?!\*/).)*(?!\*/))[^\r\n]
не будут.