Я пытаюсь найти все комментарии в куске текста с помощью c # с помощью регулярных выражений.Комментарии выглядят так:
(*Some comment text*)
(*Some comment (*In comment*) might also appear*)
(*Comment might
be on serveral lines*)
Начало комментария (*
Конец комментария *)
Найти комментарий не так сложно, если это не такnested: \(\*(.*?)\*\)
Я также нашел решения для комментариев, где начало и / или конец комментария существует только из одного символа (в приведенном ниже примере начало - (
, а конец - )
).Это работает для вложенных комментариев:
(?<Open>[(])(([^()]|(?<Open>[(])|(?<-Open>[)]))*?)(?<-Open>[)])(?(Open)(?!))
Приведенное выше решение основано на поиске альтернатив => Группа открытия, группа закрытия или все, что не является группой открытия и закрытия.
Это последняя часть, которая хитрая.Как я могу сказать регулярному выражению, что [^()]
должно быть комбинацией символов вместо отдельных.Что я хотел бы сделать, это:
(?<Open>\(\*)(([^\(\*,\*\)]|(?<Open>\(\*)|(?<-Open>\*\)))*?)(?<-Open>\*\))(?(Open)(?!))
Но [^\(\*,\*\)]
следует рассматривать как - не (*" and also not "*)
- вместо - ни один из этих (*,*)
символов -