Здравствуйте, Thornik, Вы писали:
DIS>>Regex comment = new Regex(@"/\*.*\*/", RegexOptions.IgnoreCase | RegexOptions.Singleline);
DIS>>все комментарии свалились в 1 совпадения
T>Всё правильно. Не забывайте, что регэкспы — жадные
т.е. "*" бежала по совпадениям до тех пор, пока не упёрлась в последнюю "*/". Для таких случаев надо юзать ограничитель — "?":
T>/\*.*?\*/
Спасибо! Ограничитель помог! Осталась еще одна проблема..
У меня не получается дописать выбор *русскоязычных* комментариев. (русскоязычный комментарий в моей задаче — комментарий, содержащий минимум 1 символ [а-яА-Я])
Regex comment = new Regex(@"(/\*.*?\*/)|(//.*?\n)"
, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Compiled);
Это регекс, который вытаскивает все. Дальше я иду по коллекции мачей
MatchCollection matches = comment.Matches(filecontent);
foreach (Match match in matches)
{
if (Regex.IsMatch(match.Value, @"[а-яА-Я]+"))
.....
и таким образом выбираю только русские
Уверен, можно выбирать только русские комменты сразу.
Я пытался заменить тело комента в паттерне ".*" на что-то вроде ".*[а-яА-Я]+.*". В таком случае регекс не находил не одного из 850 русскоязычных комментов моей тестовой папки сорцов. Как можно описать тело русскоязычного коммента?