私は (C# で) 古典的な C によく似たスクリプト言語を処理する単純なパーサーを作成しています。
私が持っているスクリプト ファイルの 1 つで、/* ブロック コメント */ を認識するために使用している正規表現がある種の無限ループに入り、何年にもわたって 100% の CPU を使用しています。
私が使用している正規表現は次のとおりです。
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
これがロックされる理由について何か提案はありますか?
または、代わりに使用できる別の正規表現は何ですか?
詳しくは:
- .NET 3.5 を対象とする C# 3.0 での作業。
- Regex.Match(string,int) メソッドを使用して、文字列の特定のインデックスで照合を開始しています。
- プログラムを 1 時間以上実行したままにしましたが、一致は完了しません。
- Regex コンストラクターに渡されるオプションは
RegexOptions.Multiline
、およびRegexOptions.IgnorePatternWhitespace
; です。 - 正規表現は、453 個のテスト ファイルのうち 452 個で正しく機能します。