1

ログ ファイルを解析し、エラー ステートメントを照合しようとしています。「エラーCS」と一致する行の部分は、多数の行に適用され、重複する行とそうでない行があります。重複を返せない方法はありますか。RegExのJavaフレーバーを使用..

例: 私の単純な正規表現が返されます

Class1.cs(16,27): error CS0117: 'string' does not contain a definition for 'empty'
Class1.cs(34,20): error CS0103: The name 'thiswworked' does not exist in the current context
Class1.cs(16,27): error CS0117: 'string' does not contain a definition for 'empty'
Class1.cs(34,20): error CS0103: The name 'thiswworked' does not exist in the current context

返してほしい:

Class1.cs(16,27): error CS0117: 'string' does not contain a definition for 'empty'
Class1.cs(34,20): error CS0103: The name 'thiswworked' does not exist in the current context
4

2 に答える 2

2

技術的に言えば、正規表現では、これは不可能です。もっと強力なものが必要です。

正規表現は、正規言語に一致させるためのものです。一致させようとしているパターンは規則的ではありません。

いくつかの「状態」、以前に一致したエラーを記憶する式が必要であり、正規表現はこのタイプの計算を処理するためのものではありません。Turing Machineは状態を保存できます。これは、必要なものに沿ったものです。(Java がうまく適合します。)

これは、すべてのエラー行を見つけた後でログ パーサーにロジックを追加することで、かなり簡単に解決できます。

于 2010-11-02T14:17:39.777 に答える
2

1 つの解決策は、正規表現を使用して照合し、重複を削除するセットのようなデータ構造に行を入れることです。解析の最後に、セットの内容を出力するだけです。

順序が気になる場合は、行をキーとして、行番号を値として、ある種のマップに追加できます (おそらく、挿入する前に一致するエントリをチェックします)。値で並べ替えると、特定の行の最初のインスタンスのリストが表示されます。

于 2010-11-02T16:14:39.050 に答える