Как регулярное выражение заменить что-то не в комментарии? - PullRequest
0 голосов
/ 27 июня 2011

Как с помощью regexp заменить что-то в коде, который не является комментарием?

..PATTERN.. PATTERN // .. PATTERN ..

на

..ANOTHER.. ANOTHER // .. PATTERN ..

Комментарии могут быть // или /* */

Регулярное выражение для поиска комментариев:

/\*(.|[\r\n])*?\*/|(//.*)

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Вы можете легко сделать это для однострочных комментариев, используя отрицательный вид сзади (но все еще подверженный проблеме буквальной строки вида ".... // ....."):

string target = "replace // don't replace";
var output = Regex.Replace(target, "(?<!//.*)replace", "new string");
Console.WriteLine(output); //  new string // don't replace

Может быть, это может работать для многострочного:

string target = 
    @"replace;
/*
* don't replace
*/
replace;
    ";

var output = Regex.Replace(target, @"(?<!./\*\s*)replace(?!\s*\*/)", "new string", RegexOptions.Singleline);

Console.WriteLine(output); 

вывод:

новая строка;/ * * не заменять * / новую строку;

0 голосов
/ 28 июня 2011

Просто создайте простой сканер с двумя состояниями (REGULAR_TOKEN, COMMENT_TOKEN, ....)

Затем для каждого REGULAR_TOKEN выполните простую замену и оставьте comment_tokens. Еще раз рекомендую Boost Spirit /

Если бы вы указали свою цель / проблему больше, я мог бы привести пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...