我正在编写一个简单的解析器(使用C#语言),用于处理类似于经典C语言的脚本语言。
在我的一个脚本文件中,我使用的正则表达式来识别/*块注释*/进入了某种无限循环,CPU占用率达到了100%,持续了很长时间。
我正在使用的正则表达式是这个:
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
有什么建议可以解释为什么会死锁吗?
或者,我能用另一种正则表达式来替代吗?
更多信息:
- 在C# 3.0中工作,目标框架是.NET 3.5;
- 我正在使用Regex.Match(string,int)方法从字符串的特定索引开始匹配;
- 我已经让程序运行超过一个小时了,但匹配还没有完成;
- 传递给Regex构造函数的选项是
RegexOptions.Multiline
和RegexOptions.IgnorePatternWhitespace
; - 这个正则表达式对我的453个测试文件中的452个都可以正确工作。