我使用((?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/))|(--[^@].*[\r\n])
Regex来识别文件中的所有评论。 (我正在阅读PL / SQL文件,它使用 - 用于单个注释和/ * * /用于多行注释)
这很好,我能够毫无问题地获得所有评论。
我想获得与上述正则表达式不匹配的代码。
所以我使用了正则表达式[^(((?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/))|(--[^@].*[\r\n]))]
MatchCollection matches = Regex.Matches(text, "[^(((?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/))|(--[^@].*[\r\n])])");
for (int i = 0; i < matches.Count; i++)
{
Console.WriteLine(matches[i].Groups[0].Value);
}
然后当我尝试运行时说
The file could not be read:
parsing "[^((?:/\*(?:[^*]|(?:\*+[^*/]))*\*+/))|(--[^@].*[
])]" - Too many )'s.
如何获取不是评论的行?
答案 0 :(得分:1)
尝试使用其他方式:
MatchCollection matches = Regex.Matches(text, "((?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/))|(--[^@].*[\r\n])");
string result=text;
for (int i = 0; i < matches.Count; i++)
{
result=result.Replace(matches[i].Value);
}
答案 1 :(得分:0)
我能够删除评论并获取未注释的文本,如下所示
public static readonly string BLOCK_COMMENTS = @"/\*(.*?)\*/";
public static readonly string LINE_COMMENTS = @"--[^@](.*?)\r?\n";
public static readonly string STRINGS = @"""((\\[^\n]|[^""\n])*)""";
string sWithoutComments = Regex.Replace(textWithComments.Replace("'", "\""), ServerConstant.BLOCK_COMMENTS + "|" + ServerConstant.LINE_COMMENTS + "|" + ServerConstant.STRINGS,
me =>
{
if (me.Value.StartsWith("/*") || me.Value.StartsWith("--"))
return me.Value.StartsWith("--") ? Environment.NewLine : "";
return me.Value;
},
RegexOptions.Singleline);