如何用regexp替换注释中没有的内容



如何使用regexp替换代码中非注释的内容?

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

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

注释可以是///* */

Regexp查找评论是:

/*(.|[rn])*?*/|(//.*)

对于单行注释,您可以通过使用否定的lookbacking(但仍然容易出现"…./….."形式的文字字符串问题)轻松地执行此操作:

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); 

输出:

新字符串;/**不替换*/新字符串;

只需执行一个简单的两状态扫描仪(REGULAR_TOKEN、COMMENT_TOKEN……)

然后,对每个REGULAR_TOKEN进行直接替换,并保留comment_TOKEN。我再次推荐Boost Spirit/

如果你进一步指定了你的目标/问题,我可能会举一个的例子

最新更新