1

サーバーから次の方法で入力を受け取ります(サンプル入力データ)。

[1284336000]: host1;event1;flag;state;counter;errors or warnings
[1284336000]: host2;event1;flag;state;counter;errors or warnings
[1284336000]: host1;event2;flag;state;counter;errors or warnings
[1284336000]: host2;event2;flag;state;counter;errors or warnings

入力を一致させ、一致に基づいて、値を持つ変数を作成する必要がありますhostname-eventname

私の正規表現

^\[\d+\]:\s((host1);(event1)|(host2);(event2)|(host3);(event2)|(host2);(event1));(\w+);(\w+);(\d).+$

$2またはのような参照変数で、ホストとイベントの名前を別々にしたいと思います$3

たとえば、次の入力について考えてみます。

[1284336000]: host1;event1;flag;state;counter;errors or warnings

<hostname-eventname>上記の一致から取得したホスト名とイベント名に応じた名前の変数を作成する必要があります。

言う、

$myVar=$2-$3  (that is, $myVar=host1-event1)

これ以上分割操作を適用できません。したがって、プログラミングはありません。入力データしか読み取れません。はい、正規表現はPerl正規表現タイプです。

クエリを明確にしたかどうかわかりませんか?

4

2 に答える 2

4

使用できます

"^\[\d+\]:\s([^;]*);([^;]*)"

最初の2つのキャプチャグループにホスト名とイベント名があります。

于 2010-12-02T15:47:27.357 に答える
3

ブランチリセット演算子を使用する必要があります(?|…|…|…)

^\[\d+\]:\s(?|(host1);(event1)|(host2);(event2)|(host3);(event2)|(host2);(event1));(\w+);(\w+);(\d).+$

またはもっと読みやすく:

m{
    ^ \[ \d+ \] : \s
    (?| (host1);(event1)  # $1, $2
      | (host2);(event2)  # $1, $2
      | (host3);(event2)  # $1, $2
      | (host2);(event1)  # $1, $2
    )
    ;
    (\w+);(\w+)           # $3, $4
    ; (\d)                # $5
    .+ $
}x
于 2010-12-02T15:50:58.170 に答える