Re[4]: Regex pattern для русских комментариев в исходниках C
От: -DIS-  
Дата: 11.07.06 10:38
Оценка:
Здравствуйте, 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 русскоязычных комментов моей тестовой папки сорцов. Как можно описать тело русскоязычного коммента?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.