【发布时间】:2015-01-06 07:56:31
【问题描述】:
我正在使用((?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/))|(--[^@].*[\r\n]) Regex 来识别文件中的所有 cmets。 (我正在读取一个 PL/SQL 文件,它使用 -- 用于单个 cmets 和 /* */ 用于多行 cmets)
这很好用,我可以毫无问题地获得所有 cmets。
我想获取与上述正则表达式不匹配的代码。
所以我使用了正则表达式[^(((?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/))|(--[^@].*[\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.
如何获取非 cmets 的行?
【问题讨论】:
-
[^...]是一个字符类。它不会将内容识别为字符类或内部字符以外的任何内容。 -
@nhahtdh 如果是这样,我还有其他方法可以匹配非注释代码吗?
-
我希望你的 SQL 不包含
SELECT 'some -- string' FROM [some--table];-) -
@LucasTrzesniewski PLSQL 文件不仅仅是 sql 查询