如何使用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/
如果你进一步指定了你的目标/问题,我可能会举一个的例子