我正在(用 C# 编写)一个简单的解析器来处理一种看起来很像经典 C 的脚本语言。
在我拥有的一个脚本文件中,我用来识别 /* 块注释 */ 的正则表达式正在进入某种无限循环,占用 100% 的 CPU 时间。
我正在使用的正则表达式是这样的:
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
关于为什么这可能会被锁定的任何建议?
或者,我可以使用什么其他正则表达式来代替?
更多信息:
- 在面向 .NET 3.5 的 C# 3.0 中工作;
- 我正在使用 Regex.Match(string,int) 方法在字符串的特定索引处开始匹配;
- 我已经让程序运行了一个多小时,但比赛还没有完成;
- 传递给 Regex 构造函数的选项是
RegexOptions.Multiline
andRegexOptions.IgnorePatternWhitespace
; - 正则表达式适用于我的 453 个测试文件中的 452 个。